我在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服务器中肯定有一些有趣的东西......