2016-02-06 3 views
0

Я, выполняя следующий код Python, но когда я запускаю много потоков удаленный API (Google API) возвращает:Python многопоточный в блоке

<HttpError 403 when requesting https://www.googleapis.com/prediction/v1.6/projects/project/trainedmodels/return_reason?alt=json returned "User Rate Limit Exceeded"> 

У меня есть около 20K объекты, которые мне нужно запустить в время обработки API. Это отлично работает с небольшим количеством объектов, как замедлить или отправить запрос блоками?

from threading import * 

collection_ = [] 
lock_object = Semaphore(value=1) 

def connect_to_api(document): 
    try: 
     api_label = predictor.make_prediction(document) 
     return_instance = ReturnReason(document=document) # Create Return Reason Object 
     lock_object.acquire()        # Lock object 
     collection_.append(return_instance) 
    except Exception, e: 
     print e 
    finally: 
     lock_object.release() 

def factory(): 
    """ 

    :return: 
    """ 

    list_of_docs = file_reader.get_file_documents(file_contents) 
    threads = [Thread(target=connect_to_api, args=(doc,)) for doc in list_of_docs] 
    [t.start() for t in threads] 
    [t.join() for t in threads] 
+0

Используйте ThreadPool. Ваш запрос является стандартной задачей, в этом нет ничего особенного. –

ответ

1

Обработка тарифов - это целая проблема, возможно, просто спать не будет достаточно для долгосрочных задач.

Я предлагаю вам заглянуть в очередях (RQ довольно просто), а также статья будет полезна: http://flask.pocoo.org/snippets/70/

Смежные вопросы