2014-02-11 3 views
1

Я столкнулся с этой проблемой тайм-аута 60 секунд, когда мой сервер GAE связывается с сервером EC2 REST. На стороне GAE моей задачей является загрузка файла csv, анализ его информации и отправка каждой строки в качестве запроса на сервер REST. Я использую многопоточность и очередь задач, чтобы сократить время запроса, но все же получил тайм-аут, когда файл большой. Ниже приведен пример моего кода, и я ценю любые предложения.GAE (Python) Urlfetch 60 Second Timeout Issue

from threading import Thread 
import Queue 

thread_count = 10 #the number of theading 
job_q = Queue.Queue() #a job queue 

def html_table(row_inp_all): 
    while True: 
     row_inp_temp_all = row_inp_all.get() 
     all_dic = {"row_inp_temp_all": row_inp_temp_all} 
     data = json.dumps(all_dic) 
     url=url_part1 + '/przm/' + jid 
     response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=http_headers, deadline=60) 
     output_val = json.loads(response.content)['result'] 


def loop_html(thefile): 
    reader = csv.reader(thefile.file.read().splitlines()) 
    header = reader.next() 
    for row in reader: 
     job_q.put(row) 
    all_threads = [Thread(target=html_table, args=(job_q,)) for j in range(thread_count)] 
    for x in all_threads: 
     x.start() 
    for x in all_threads: 
     job_q.put(None) 
    for x in all_threads: 
     x.join() 
+0

Можете ли вы сделать это в фоновом режиме? Если это так, то задача очереди приложений для приложений google может быть билетом: https://developers.google.com/appengine/docs/python/taskqueue/ – mgilson

+0

@mgilson: спасибо за предложение! –

+0

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

ответ

0

Существует жесткий предел для любого запроса 60 секунд, и если вы хотите больше времени, чем вы должны использовать Task Queues API, который может работать в фоновом режиме в течение 10 минут, которые должны быть более чем достаточно в вашем случае ,

Перед тем, как погрузиться в очередь задач, вы можете попробовать background work with the deferred library, который фактически использует API очереди задач, но с ним гораздо проще работать.

+0

Спасибо, и будут ли эти очереди задач хорошо работать с потоками? или мне нужно переделать всю структуру .... –