我是一个相对较新的Python程序员,并且一直使用Tweepy来处理Twitter流。我小心翼翼地放入代码来暂停流以防速率限制,但它根本不起作用,因此我被禁止重载我的流。试着用推特来解决这个问题,但与此同时,如果有人能指点我,我将不胜感激。 Tweepy文档不是很好,似乎与当前版本不同步。
我的代码的相关部分是:
class myStreamListener(tweepy.StreamListener):
def on_data(self, data):
tweet = json.loads(data)
process_tweet(tweet) # (not shown)
return True
def on_error(self, status_code):
if status_code == 420:
logger.info('420 error: pausing 60s')
sleep(60)
return True # continue listening
logger.info('Error: status %s', str(status_code))
return True # continue listening
def on_timeout(self):
logger.info('Timeout: pausing 60s')
sleep(60)
return True # continue listening
def run():
# (stuff not shown--logging objects, config)
# Construct the Stream instance
auth = _get_auth(config) # (not shown)
api = tweepy.API(auth)
while True:
try:
twitterStream = tweepy.Stream(auth, myStreamListener(api))
twitterStream.sample(async=True)
except:
logger.error('Error occurred in stream.')
sleep(5)
continue
当我运行它并拖尾日志文件时,我得到:
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
^C
因此,尽管我试图等待并尊重速率限制,我的机器人继续锤击API,指数增加我必须等待重置之前的时间。我确实希望机器人永远运行(或者至少在我手动停止之前),所以我不希望它从任何这些错误中返回False。 (我已经看到代码会逐渐等待更长的时间,但由于这甚至没有等到我想要的60秒,所以现在还没有太多意义。)
感谢。