长时间运行的Python脚本
我有一个应用程序,包含以下部分:
client->nginx->uwsgi(python)
还有一些Python脚本可能会运行很长时间(2到6分钟)。在脚本执行完后,我需要把内容给客户,但连接却因为“网关超时504”的错误而断开。针对这种情况,我可以用什么方法来避免这个错误呢?
3 个回答
0
这主要取决于你的服务器设置(也就是把数据发送回客户端有多简单)。不过,在你运行一个比较耗时的应用程序时,是否可以定期发送一些“空”的内容(比如简单的换行符,假设你的输出是html),让浏览器觉得这是网络连接慢,而不是卡住了呢?
0
我曾经搭建过一个系统,里面的“主页”有一个叫做Iframe的东西,它可以显示一个长时间运行的程序的输出,格式是文本。这个Iframe的内容处理程序是一个用Python写的CGI脚本,它会先发送所有的头信息,然后在Apache服务器下逐行输出程序的结果。
我不确定这个方法在你的配置下是否能正常工作。
2
那么你的目标是想缩短脚本的运行时间,还是想避免它们超时呢?不管你怎么尝试,浏览器都会放弃一个运行了6分钟的请求。
也许可以考虑在服务器上处理这些工作,然后用AJAX请求来获取进度?
或者,如果可能的话,尝试优化一下脚本。例如,如果你有一些非常慢的SQL操作,可以试着把它们整理一下。
否则,如果没有更多的信息,就很难给出更具体的答案。