我正在使用Python Pyramid rest api,在我需要处理一个excel的一个请求中,对于它的每一行,我都获得了GPS坐标并进行了大量验证,这仅意味着请求可能需要花费10分钟的时间来处理,我需要使用json将响应返回给调用者。我无法通过WebSocket发送其他任何内容。
我的问题是:如何增加此请求的超时时间?这是我的方法:
@view_config(route_name='client_api_upload',
request_method='POST',
renderer='json',
permission='upload client')
def client_api_upload(request):
client_id = request.POST['client_id']
filename = request.POST['file'].filename
input_file = request.POST['file'].file
extension = os.path.splitext(filename)[1]
new_file_name = str(uuid.uuid4())+extension
file_path = os.path.join(tempfile.gettempdir(), new_file_name)
with open(file_path, 'wb') as output_file:
shutil.copyfileobj(input_file, output_file)
importer = ClientBuildingImporter(client_id=client_id, db_session=request.dbsession)
importer.import_building_from_excel(excel_file_path=file_path)
return importer.import_result
感谢您的帮助
答案 0 :(得分:1)
我不认为是金字塔关闭了连接,更可能是为您的应用程序提供服务的网络服务器(Apache / Nginx等)。金字塔本身通常很乐意随心所欲地拖下去。
我同意@SamMason的观点,即有更好的(但更复杂的)方法可以正确执行长时间运行的任务,但是在某些受控情况下,最好使用一个长时间运行的请求来执行大量处理。我有一些迁移/维护脚本,这些脚本要花几个小时才能完成,并且运行良好。
让所有参与者(Web服务器,代理,浏览器等)感到满意的技巧是确保应用程序返回的数据有点滴,不要让HTTP连接只是闲置在那里。
答案 1 :(得分:0)
正确的方法是不要在请求中执行长时间运行的任务。
你能做的是