我的应用程序(py3,app引擎flexi)接收到一个web请求>运行BQ查询>获取数据>处理数据(不是非常CPU密集型的!)>返回响应。
请求可以由
由于BQ查询的性质:
我得到了关键工作超时(pid:7)错误,我相信我通过调整gunicorn.conf.py中的gunicorn.conf.py设置来解决这个错误。但是nginx继续返回502 error作为响应( cron作业状态以失败结尾)
有人能告诉我为什么继续获得502错误,以及我应该调整哪个参数(在app.yaml或应用程序PY代码中)来管理这个超时吗?以及如何处理这些请求的最佳实践,您肯定要花费2-5分钟(甚至更长的时间!)
或者,我正在考虑创建云函数端点,现在CF支持PY (并且支持更高的超时时间高达9分钟..)
发布于 2018-08-14 08:51:31
即使您知道您的请求将花费<9分钟,让客户端应用程序等待也不是很好的做法,因为请求有多种可能被中断的方式。
这样做的方法是通过作业/操作(与BQ和大多数Google完全一样)。一旦查询被启动( BQ作业被插入),您就会存储BQ返回的作业ID,并为您的应用程序生成一个新的ID(例如,在数据存储中)。
然后,客户端应用程序开始轮询此操作。每5秒它会询问你的应用程序(或者你的功能)你的操作是否完成。然后,应用程序从存储区如果这项工作完成了,请在job API中进行检查。中检索烧烤作业ID,并返回未完成的状态,以防未完成状态。
一旦应用程序检查烧烤端的作业是否完成,它可以检索数据。,处理它,并返回结果。
这将使该过程更加强大和灵活,并避免使所有这些连接保持打开状态,而这些连接根本不具有可伸缩性。
有了这样的体系结构,您可以在任何地方部署它(GAE,函数,.)而且应该还能用。为了方便使用,我会在Datastore中使用Google函数(用于存储您的操作it ),但在这种情况下,它主要取决于您更适合使用什么。
https://stackoverflow.com/questions/51832857
复制相似问题