为了账号安全,请及时绑定邮箱和手机立即绑定

Python金字塔增加请求超时

Python金字塔增加请求超时

慕尼黑的夜晚无繁华 2021-09-14 20:53:18
我正在研究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谢谢你的帮助
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我认为不是 Pyramid 关闭连接,更有可能是为您的应用程序提供服务的网络服务器(Apache/Nginx 等)。只要有必要,金字塔本身通常很乐意继续前进。

我同意@SamMason 的观点,即有更好(但更复杂)的方法来正确执行长时间运行的任务,但在某些受控情况下,有一个执行大量处理的长时间运行的请求可能没问题。我有一些迁移/维护脚本需要几个小时才能完成,效果很好。

让所有参与者(网络服务器、代理、浏览器等)满意的诀窍是确保应用程序返回少量数据,不要让 HTTP 连接闲置。

不幸的是,对于 Pyramid,流请求并不完全简单,但有一些 资源可能会为您指明正确的方向。


查看完整回答
反对 回复 2021-09-14
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

正确的做法是不要在请求中执行长时间运行的任务。

你能做的是

  • 提出启动任务的初始请求,立即返回。此请求将任务写入数据库。

  • 有一个后台工作进程(例如 Celery)来处理任务

  • 有一个前端轮询/JavaScript/重定向循环来检查后台进程是否完成了任务


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信