我有一个在烧瓶和少量JQuery上运行的网络应用程序。
该应用使用API收集数据并向用户返回图表。对于小型请求,一切正常。但是,我想让用户请求大量数据。当用户要求说100个数据点时,程序需要运行10分钟。
在程序完成之前,会抛出502错误。
其他细节: 我已经设置了日志记录,可以看到程序继续运行并在502之后收集数据。我还使用ajax来调用有问题的长时间运行烧瓶功能,并在502上触发警报,这就是我知道错误代码。
问题: 有这个问题的解决方案吗?
TIA
答案 0 :(得分:2)
有。您可能希望使用像Celery这样的异步任务队列。
想象一下,这是一个向用户返回响应的函数:
def respond():
data = long_running_work() # Blocks the return on long waits
return Response(data)
data = long_running_work() # Doesn't get executed.
如果需要的时间超过客户端预期的超时时间,则无法将长时间运行的工作放在请求/响应周期中。另一方面:
def respond():
# Shoves a message into rabbitmq
# to be dealt with by someone else
send_task() # takes no time, no blocking
return Response('Please wait')
send_task
负责设置后台进程以完成工作并使其可用于某处(在s3上,在服务器上,无论何处)。在客户端js中,您可以在轮询背景中的预期位置时显示微调器和“等待...”消息,并在准备就绪时显示。这样,没有任何时间超时或被破坏。
要获得更长(更好)的解释,请考虑this。
答案 1 :(得分:0)
502 HTTP Status Code 如果您增加请求的超时,或以其他方式使用分页