异步Python CGI调用将停止浏览器直到完成

时间:2017-05-26 15:13:24

标签: python asynchronous cgi

我正在尝试异步执行长时间运行的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>'

1 个答案:

答案 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)