我在Nginx和Gunicorn后面有一个Django项目。其中一个应用程序使用Exscript与网络设备交互,Exscript又使用Paramiko。有些设备在Gunicorn后面时无法正常工作。在
在django管理shell中,同样的代码也可以正常工作。 如果我启动内置的django服务器,它也可以工作,但是如果我绕过nginx,直接连接到Gunicorn,我仍然会得到错误。在
我试着把这个功能移到一个芹菜任务中,它也有同样的问题,但只是在Gunicorn之后。在
我用django扩展编写了一个脚本,它可以从命令行工作,但是如果通过子进程调用,则会失败。但只在古尼康后面。在
所有出现故障的设备似乎都是F5 ltm,而且exscript对象上的缓冲区似乎正在以某种方式被修改。如果非要我猜的话,我会说Gunicorn和Exscript/Paramiko在某种程度上踩到了对方的内存,或者Gunicorn正在设置Exscript正在使用的一些环境变量。在
不管怎样,我完全被难住了,如果你能指导我如何解决这个问题,我将不胜感激。在
完全是猜测,但这可能对调试有帮助。基本上,确保删除了所有的输出缓冲,这通常会隐藏分层多个大型框架时实际发生的事情(就像您在这里所做的那样)。在
确保禁用Python中的所有输出缓冲,包括前台web服务器进程和任何工作进程(设置
PYTHONUNBUFFERED
是确保没有任何Python脚本具有缓冲的简单方法,至少在标准库函数上是这样)。在终端还可以引入缓冲区,使调试异常困难。考虑将},以禁用stdout和stderr上的缓冲区(
your command
切换到{your command
仍然可以重新启用它们,但大多数程序不会)。在相关问题 更多 >
编程相关推荐