我正在尝试异步执行长时间运行的python 2.7 cgi脚本并将完整的html返回给浏览器,因此它不会超时(并且无需等待脚本完成)...我在Windows XAMPP上运行和缩写代码在下面
我的问题是浏览器仍然等待整个脚本完成...我做错了什么?我已经阅读了其他类似的问题,他们评论说添加stdout和stderr参数可能会解决这个问题,但它对我来说没有...我也试过设置close_fds = True并消除了stdout / sterr参数,这也没有用... script.py工作正常,没有任何输出...
或者你会推荐另一种方法吗?感谢您提供任何帮助!
#!c:\program files\anaconda2\python.exe
import cgi
import subprocess
import sys
subprocess.Popen([sys.executable, 'c:/path/script.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print 'Content-type:text/html\r\n\r\n'
print '<html>'
print '<head></head>'
print '<body></body>'
答案 0 :(得分:0)
Popen有一些标志可以将进程从父进程中分离出来......这样就可以让cgi进入&#34;完成&#34;即使子进程仍在运行。
kwargs = {}
CREATE_NEW_PROCESS_GROUP = 0x00000200 # note: could get it from subprocess
DETACHED_PROCESS = 0x00000008 # 0x8 | 0x200 == 0x208
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
subprocess.Popen([sys.executable, 'c:/path/script.py'], close_fds=True, **kwargs)