GAE(Python)Urlfetch 60秒超时问题

时间:2014-02-11 16:09:20

标签: python google-app-engine timeout urlfetch

当我的GAE服务器与EC2 REST服务器通信时,我遇到了这个60秒的超时问题。在GAE方面,我的任务是上传csv文件,解析其信息并将每一行作为请求发送到REST服务器。我使用多个线程和任务队列来减少请求时间,但是当文件很大时仍然会超时。以下是我的代码示例,我感谢任何建议。

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()

1 个答案:

答案 0 :(得分:0)

对于60秒的任何请求都有一个硬限制,如果你想要更多的时间,你应该使用Task Queues API,它可以在后台运行长达10分钟,这在你的情况下应该足够了

在深入了解任务队列之前,您可以尝试实际使用任务队列API的background work with the deferred library,但可以更轻松地使用它。