gunicorn会导致exscript / paramiko出现问题吗?

时间:2014-10-30 18:22:22

标签: python django gunicorn paramiko f5

我有一个在Nginx和Gunicorn背后运行的Django项目。其中一个应用程序使用Exscript与网络设备交互,后者又使用Paramiko。有些设备在Gunicorn后面无法正常工作。

同样精确的代码可以在django-admin shell中正常工作。 如果我启动内置的django服务器,它也会工作,但如果我绕过nginx,我仍然会收到错误,并直接连接到Gunicorn。

我尝试将功能转移到芹菜任务,它有同样的问题,但仅限于Gunicorn。

我使用django-extensions编写了一个脚本,该脚本可以从命令行运行,但如果通过子进程调用则会失败。但仅限于Gunicorn。

失败的设备似乎都是F5 LTM,看起来exscript对象上的缓冲区正在以某种方式被修改。如果我不得不猜测我会说Gunicorn和Exscript / Paramiko以某种方式踩到彼此的记忆,或者Gunicorn正在设置一些环境变量,Exscript正在接受。

在任何情况下,我都会感到非常难过,并会对如何解决此问题提供任何指导。

1 个答案:

答案 0 :(得分:1)

总猜,但也许这对调试很有帮助。基本上,确保您已经删除了所有输出缓冲,这通常可以隐藏在分层多个大框架时真正发生的事情(就像您在这里所做的那样)。

确保在Python中禁用所有输出缓冲,包括前台Web服务器进程和任何工作进程(设置PYTHONUNBUFFERED是一种简单的方法来确保您的python脚本都没有缓冲,至少在标准库函数)。

终端还可以引入缓冲区,使调试异常困难。考虑将your command切换到stdbuf -o0 -e0 your command以禁用stdout上的缓冲区,而stderr(your command仍然可以重新启用它们,但大多数程序都没有)。