2015-12-15 1 views
0

Я написал эту функцию, которая обрабатывает «ограничение скорости» курсора Tweepy, чтобы продолжать загрузку из API-интерфейсов Twitter.Положите несколько потоков во время сна/подождите, не используя Time.Sleep()

def limit_handled(cursor, user): 
    over = False 
    while True: 
     try: 
      if (over == True): 
       print "Routine Riattivata, Serviamo il numero:", user 
       over = False 
      yield cursor.next() 
     except tweepy.RateLimitError: 
      print "Raggiunto Limite, Routine in Pausa" 
      threading.Event.wait(15*60 + 15) 
      over = True 
     except tweepy.TweepError: 
      print "TweepError" 
      threading.Event.wait(5) 

Поскольку я использую Serveral темы для подключения Я хотел бы, чтобы остановить каждого из них, когда возникает ошибка RateLimitError и перезапустить их после 15 минут. я ранее использовал функцию:

time.sleep(x) 

Но я понял, что не очень хорошо работает для потоков (счетчик не увеличивается, если поток не активен), поэтому я пытался использовать:

threading.Event.wait(x) 

Но эта ошибка возникает:

Exception in thread Thread-15: 
Traceback (most recent call last): 
    File "/home/xor/anaconda/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/home/xor/anaconda/lib/python2.7/threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/home/xor/spyder/algo/HW2/hw2.py", line 117, in work 
    storeFollowersOnMDB(ids, api, k) 
    File "/home/xor/spyder/algo/HW2/hw2.py", line 111, in storeFollowersOnMDB 
    for followersPag in limit_handled(tweepy.Cursor(api.followers_ids, id = user, count=5000).pages(), user): 
    File "/home/xor/spyder/algo/HW2/hw2.py", line 52, in limit_handled 
    threading.Event.wait(15*60 + 15) 
AttributeError: 'function' object has no attribute 'wait' 

Как я могу «сон/ждать» мои темы будучи уверенными, что они проснутся в нужный момент?

ответ

2

Попробуйте сделать это как это вместо:

import threading 
dummy_event = threading.Event() 
dummy_event.wait(timeout=1) 

также попробовать Google-ING следующий раз первым: Issues with time.sleep and Multithreading in Python

+0

Спасибо большое, я гугле, но без успеха. Извините за пустую трату времени! – Aalto

+0

Ах, не проблема, увидела, что вы только начинаете, поэтому я не спускаюсь вниз. также я надеюсь, что вам понравится это сообщество c: – ivan