Я столкнулся с этой проблемой тайм-аута 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()
Можете ли вы сделать это в фоновом режиме? Если это так, то задача очереди приложений для приложений google может быть билетом: https://developers.google.com/appengine/docs/python/taskqueue/ – mgilson
@mgilson: спасибо за предложение! –
Очень редко вам нужно прибегать к использованию потоков в appengine, и если код не ждет ресурсов, он, вероятно, будет работать медленнее. асинхронные методы и очереди задач - все, что вам, вероятно, понадобится. –