python子进程Popen在通过apache CGI调用时意外阻止了父进程

时间:2017-02-14 16:12:04

标签: python apache subprocess cgi

我在Apache服务器2.4上有一个由CGI脚本调用的python任务(run.py)。 我使用python 2.7.11,操作系统" Fedora发布23(二十三)"

在run.py中

我有

p = subprocess.Popen([sys.executable,"main.py"],stdout=subprocess.PIPE)
return "Your task has been launched"

我想使用Popen启动非阻塞过程并立即返回。

但问题是,它会阻止程序。直到main.py完成后,run.py才会返回。任何人都知道为什么Popen的行为与doc所说的不同?

我也试过

subprocess.Popen([sys.executable,"main.py"],stdout=subprocess.PIPE,close_fds=True)
subprocess.Popen([sys.executable,"main.py"],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
subprocess.Popen([sys.executable,"main.py"],stdout=None,stderr=None)

以上所有这些都不起作用。

更多信息:

相同的代码在我的旧Apache服务器2.2版中按预期工作。 这个问题与apache服务器配置文件(httpd.conf)有关吗?

现在我能想到新老服务器之间的区别是:

新服务器:

python 2.7.11, os Fedora release 23 (Twenty Three), new installed apache 2.4 (httpd.conf almost all default)

旧服务器:

python 2.7.3, os Fedora release 17 (Beefy Miracle), apache 2.2 (httpd.conf have lots of lines then new server)

任何线索?非常感谢

修改

我忘了提到,在新服务器中我在test.py中编写了代码并使用命令行调用它" python test.py"。它工作正常,后台返回和子进程在后台运行,在apache服务器中肯定有一些有趣的东西......

0 个答案:

没有答案