2015-04-11 3 views
2

Я относительно новичок в tweepy python library. Я хочу быть уверенным, что сценарий python моего потока всегда работает на удаленном сервере. Поэтому было бы здорово, если бы кто-то поделился лучшими практиками, как это сделать.Tweepy. Сделать поток run forever

Прямо сейчас я делаю это так:

if __name__ == '__main__': 

while True: 

    try: 

     # create instance of the tweepy tweet stream listener 
     listener = TweetStreamListener() 

     # set twitter keys/tokens 
     auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
     auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 

     # create instance of the tweepy stream 
     stream = Stream(auth, listener) 

     stream.userstream() 
    except Exception as e: 
     print "Error. Restarting Stream.... Error: " 
     print e.__doc__ 
     print e.message 
     time.sleep(5) 

И я возвращаюсь False по каждому из методов: on_error(), on_disconnect(), on_timeout(). Итак, возвращая False, поток останавливается, а затем снова соединяется в бесконечном цикле.

ответ

5

Вот как я это делаю, и он работает почти год, на двух компьютерах, чтобы обрабатывать ошибки, которые останавливают поток здесь и там.

#They don't need to be in the loop. 
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 

while True: 
    listener = TweetStreamListener() 
    stream = Stream(auth, listener, timeout=60) 

    try: 
     stream.userstream() 

    except Exception, e: 
     print "Error. Restarting Stream.... Error: " 
     print e.__doc__ 
     print e.message 

Для того, чтобы убедиться, что он работает всегда, вы должны переопределить метод on_error для обработки времени между попытками переподключения. Спящий сон на 5 секунд затруднит ваши шансы на успешное повторное подключение, потому что Twitter увидит, что вы пытались сделать это слишком часто. Но это еще один вопрос.