首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppEng Py ::长时间运行请求::502错误

AppEng Py ::长时间运行请求::502错误
EN

Stack Overflow用户
提问于 2018-08-14 02:20:48
回答 1查看 100关注 0票数 0

我的应用程序(py3,app引擎flexi)接收到一个web请求>运行BQ查询>获取数据>处理数据(不是非常CPU密集型的!)>返回响应。

请求可以由

  • 在浏览器中直接尝试URL
  • 或通过调用URL作业的cron作业

由于BQ查询的性质:

  • 我确信这个请求需要超过30秒的时间(大约2-5分钟)。
  • 我不关心并发请求的数量,只有少数几个请求同时出现(<10)

我得到了关键工作超时(pid:7)错误,我相信我通过调整gunicorn.conf.py中的gunicorn.conf.py设置来解决这个错误。但是nginx继续返回502 error作为响应( cron作业状态以失败结尾)

有人能告诉我为什么继续获得502错误,以及我应该调整哪个参数(在app.yaml或应用程序PY代码中)来管理这个超时吗?以及如何处理这些请求的最佳实践,您肯定要花费2-5分钟(甚至更长的时间!)

或者,我正在考虑创建云函数端点,现在CF支持PY (并且支持更高的超时时间高达9分钟..)

EN

回答 1

Stack Overflow用户

发布于 2018-08-14 08:51:31

即使您知道您的请求将花费<9分钟,让客户端应用程序等待也不是很好的做法,因为请求有多种可能被中断的方式。

这样做的方法是通过作业/操作(与BQ和大多数Google完全一样)。一旦查询被启动( BQ作业被插入),您就会存储BQ返回的作业ID,并为您的应用程序生成一个新的ID(例如,在数据存储中)。

然后,客户端应用程序开始轮询此操作。每5秒它会询问你的应用程序(或者你的功能)你的操作是否完成。然后,应用程序从存储区如果这项工作完成了,请在job API中进行检查。中检索烧烤作业ID,并返回未完成的状态,以防未完成状态。

一旦应用程序检查烧烤端的作业是否完成,它可以检索数据。,处理它,并返回结果。

这将使该过程更加强大和灵活,并避免使所有这些连接保持打开状态,而这些连接根本不具有可伸缩性。

有了这样的体系结构,您可以在任何地方部署它(GAE,函数,.)而且应该还能用。为了方便使用,我会在Datastore中使用Google函数(用于存储您的操作it ),但在这种情况下,它主要取决于您更适合使用什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51832857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档