克服具有长时间运行功能的Web应用程序的502错误

时间:2015-12-30 22:15:56

标签: jquery python ajax flask

我有一个在烧瓶和少量JQuery上运行的网络应用程序。

该应用使用API​​收集数据并向用户返回图表。对于小型请求,一切正常。但是,我想让用户请求大量数据。当用户要求说100个数据点时,程序需要运行10分钟。

在程序完成之前,会抛出502错误。

其他细节: 我已经设置了日志记录,可以看到程序继续运行并在502之后收集数据。我还使用ajax来调用有问题的长时间运行烧瓶功能,并在502上触发警报,这就是我知道错误代码。

问题: 有这个问题的解决方案吗?

TIA

2 个答案:

答案 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 如果您增加请求的超时,或以其他方式使用分页