长时间运行python脚本

长时间运行python脚本,python,nginx,wsgi,Python,Nginx,Wsgi,我有以下部分的申请: client->nginx->uwsgi(python) 有些python脚本可以运行很长时间(2-6分钟)。在执行脚本后,我应该向客户端提供内容,但连接中断,错误为“网关超时504”。我可以在我的案例中使用什么来避免此错误?那么,您的目标是减少脚本的运行时间,还是不让脚本超时?无论你尝试什么,浏览器都会放弃6分钟的请求 也许可以尝试在服务器上完成这项工作,然后用AJAX请求轮询进度 或者,如果可能,尝试优化脚本。例如,如果您有一些非常慢的SQL代码,请尝试清

我有以下部分的申请:

client->nginx->uwsgi(python)

有些python脚本可以运行很长时间(2-6分钟)。在执行脚本后,我应该向客户端提供内容,但连接中断,错误为“网关超时504”。我可以在我的案例中使用什么来避免此错误?

那么,您的目标是减少脚本的运行时间,还是不让脚本超时?无论你尝试什么,浏览器都会放弃6分钟的请求

也许可以尝试在服务器上完成这项工作,然后用AJAX请求轮询进度

或者,如果可能,尝试优化脚本。例如,如果您有一些非常慢的SQL代码,请尝试清理它


否则,如果没有更多的信息,就很难给出更具体的答案。

我曾经设置过一个系统,其中“主页”包含一个Iframe,它将长时间运行的程序的输出显示为text/plain。我认为Iframe内容的处理程序是一个pythoncgi脚本,它发出所有的头,然后在Apache服务器下逐行输出程序


我不知道这在您的配置下是否有效。

这在很大程度上取决于您的服务器设置(即,将数据推回到客户端有多容易),但在运行冗长的应用程序时,是否可能定期发送一些“空”内容(例如,假定输出为html的纯换行符)因此,浏览器认为这只是一个缓慢的连接,而不是一个停滞的连接?

6分钟的请求非常非常缓慢,您的客户不喜欢您的程序。首先,尝试设置缓存系统并优化数据库(如果您有巨大的表,则类似于反规范化和切片)。您可以将脚本执行划分为几个部分吗?不,我不能划分脚本。脚本不会向数据库进行查询,也不会发送很多内容。这只是图像处理的算法,但算法需要一些时间(2-6分钟)才能得出结果。我的客户理解并愿意等待。我想避免暂停。我无法进行有价值的优化,因为脚本会处理图像,而此算法无法更快地工作。也许我可以更改nginx的源代码,以增加nginx和uwsgi(或nginx和客户端)之间的连接时间?AJAX似乎是唯一合理的解决方案:在服务器上的后台继续处理,同时立即向用户返回“状态:处理”页面,该页面包含定期轮询JavaScript代码,以便在结果可用时检索结果。