【问题标题】:Heroku Python Twitterbot -- Worker Dyno Refreshes DailyHeroku Python Twitterbot -- Worker Dyno 每天刷新
【发布时间】:2017-07-08 01:45:08
【问题描述】:

我有一个使用 Heroku 设置的 Python Twitterbot,它每 3 小时从文本文件中发送一行推文。除了 Heroku 工作人员 dyno 每天至少刷新一次,然后 Twitterbot 再次从文件开头发出推文外,它一直像魅力一样工作,这显然不是我想要的。

关于如何通过工作人员 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

【问题讨论】:

    标签: python heroku twitter bots tweepy


    【解决方案1】:

    问题:Heroku 每天都会刷新文件系统和内存,因此将变量保存在内存中或存储在文件中是不行的。

    解决方案

    首先,我看到有人提议将状态存储在环境变量中,但它也被刷新了,所以这也是不可行的......

    1. 使用数据库,例如Heroku's own Postgres;然后使用 SQL Alchemy,您可以存储和查询时间戳和读取的最后一行。也许这有点矫枉过正,但这样你也可以存储统计数据,以及拥有数据库的其他细节。它不需要太多时间或代码行,而且回报不错。

    2. 使用Redis' pugin for Heroku;它也不需要太多努力,而且比使用 SQL DBMS 更简单。安装后(根据链接的说明),您只需要两行代码。

    使用 Redis

    首先你需要导入它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 脚本休眠,但测功机不会休眠,因为它正在执行 python 的休眠命令。

    如果您希望您的测功机休眠,只需安排(检查插件/调度程序)程序按计划运行(为此,您需要更改我发布的代码,使其成为一次性脚本而不是无限循环)

    注意:我还没有尝试过... 在我的测功机中,我个人不必保存状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-09
      • 2014-09-17
      • 2011-12-18
      • 1970-01-01
      • 2014-12-12
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多