Python subprocess.Popen在uWSGI下运行缓慢

5 投票
2 回答
3362 浏览
提问于 2025-04-16 12:36

我在Fedora 14上搭建了一个开发服务器,使用Cherokee作为服务器,并通过uWSGI来连接我的WSGI应用程序。

当第一次请求到达应用程序时,我会像这样启动一个进程:

from subprocess import Popen
Popen(['bash'])  # bash is just an example; the problem happens with all programs

第一次请求需要10到15秒才能完成(后续的请求只需要不到一秒)。如果不创建Popen对象,第一次请求大约只需2到3秒就能完成。当我在Python命令行中执行相同的Popen请求时,反应是瞬间的。

这是什么原因造成的呢?我是不是漏掉了什么明显的东西?

2 个回答

3

如果你想在自己的Python代码里处理这个问题,可以选择在调用 Popen() 时加上close_fds=True。这样的话,任何套接字就不会被子进程继承了。

10

--close-on-exec

否则,你的新进程会继承这个套接字

(这是UNIX系统的标准行为)

撰写回答