从django开发服务器移动到Nginx / uWSGI时的网关超时504?

时间:2014-09-09 19:01:22

标签: django nginx uwsgi

我有一个Django应用程序与远程Raspberry Pi对话,通过Pi的相机获取图像。每当我在应用程序中测试“获取新图像”按钮时,浏览器会挂起大约60秒,图像永远不会到达。

Raspberry Pi正试图将图像发布到Django应用程序,然后该应用程序将其保存到持久存储中。

Nginx的日志在60秒标记处显示504“网关超时”。但是,当我使用Django开发服务器并花了大约一秒钟来POST图像时,这很顺利。现在出了什么问题?

1 个答案:

答案 0 :(得分:1)

确保您使用多个进程和线程运行uWSGI。

您可以通过添加:

在uWSGI命令行上对此进行测试
--processes 4 --threads 2

或在uWSGI ini文件中:

processes = 4
threads = 2

如果Pi在等待向用户显示结果的同时将图像发布回应用程序,那么uWSGI需要能够同时处理这两个事情。

另一种可能性是您的django应用程序本身使用线程,如果没有uWSGI的--threads N--enable-threads选项,则当您的应用运行时,GIL不会启用。将--enable-threads(或enable-threads = true添加到ini文件中)将启用GIL而无需启动多个应用程序线程。

如果您怀疑应用的线程可能存在问题,请参阅uWSGI文档中的a note on python threads

在任何情况下,如果您发现网关超时,请确保您已提供足够的并发性。