[英]Heroku Python Twitterbot — Worker Dyno Refreshes Daily
我有一个用Heroku设置的Python Twitterbot,它每3小时从一条文本文件发送一条推文。 除了Heroku的dyno每天至少刷新一次,然后Twitterbot从文件的开头再次发推文外,它的工作方式一直很吸引人,这显然不是我想要的。
关于如何通过worker dyno坚持的任何建议都会刷新到下一条未发布的行?
该机器人的代码非常简单,并包含在此处:
import tweepy, time
from credentials import *
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
# What the bot will tweet
filename = open('.txt','r')
tweettext = filename.readlines()
filename.close()
for line in tweettext:
api.update_status(line)
time.sleep(10800) # Sleep for 3 hours
except tweepy.error.TweepError:
pass
问题 :Heroku每天都会刷新文件系统和内存,因此不能将变量保留在内存中或存储在文件中。
解决方案 :
首先,我已经看到有人建议将状态存储在环境变量中,但是这种情况也有所刷新,因此这也不可行...
使用数据库,例如Heroku自己的Postgres ; 然后使用SQL Alchemy,您可以存储和查询时间戳以及最后读取的行。 也许这是矫kill过正,但是通过这种方式,您还可以存储统计信息以及拥有数据库的其他好处。 它不需要花费很多时间或代码行,而且效果很好。
将Redis的pugin用于Heroku ; 它也不需要太多的工作,并且比使用SQL DBMS更简单。 一旦安装(按照链接的说明),您只需要两行代码。
首先,您需要from store import redis
导入它
然后尝试类似:
f = open('.txt','r')
# teet first line
tweetline = f.readline()
api.update_status(tweetline)
redis.set('line', 1) # store line number
f.close()
time.sleep(10800) # Sleep for 3 hours
#tweets all other lines
while true:
f=open('filename')
lines=f.readlines()
current = int(redis.get('line'))
tweetline = lines[current]
redis.set('line', current + 1)
f.close()
time.sleep(10800) # Sleep for 3 hours
请注意,您使用的sleep(10800)
使python脚本进入睡眠状态,但dyno不会进入睡眠状态,因为它正在执行python的sleep命令。
如果您想让dyno入睡,只需计划(检查加载项/调度程序)程序按计划运行(为此,您需要更改我发布的代码,因此该脚本是一次性脚本而不是无限循环)
注意 :我还没有尝试过...在我的测功机中,我个人不必保存状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.