我有一个Django应用程序与远程Raspberry Pi对话,通过Pi的相机获取图像。每当我在应用程序中测试“获取新图像”按钮时,浏览器会挂起大约60秒,图像永远不会到达。
Raspberry Pi正试图将图像发布到Django应用程序,然后该应用程序将其保存到持久存储中。
Nginx的日志在60秒标记处显示504“网关超时”。但是,当我使用Django开发服务器并花了大约一秒钟来POST图像时,这很顺利。现在出了什么问题?
答案 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。
在任何情况下,如果您发现网关超时,请确保您已提供足够的并发性。