繁体   English   中英

Python - 从Web应用程序启动长时间运行的进程

[英]Python - Launch a Long Running Process from a Web App

我有一个python Web应用程序,需要启动一个长时间运行的进程。 问题是我不希望它等待整个过程。 刚刚发射完成。

我在Windows XP上运行,并且在IIS下运行Web应用程序(如果这很重要)。

到目前为止,我尝试过popen,但这似乎不起作用。 它一直等到子进程完成。

好的,我终于搞清楚了! 这似乎有效:

from subprocess import Popen
from win32process import DETACHED_PROCESS

pid = Popen(["C:\python24\python.exe", "long_run.py"],creationflags=DETACHED_PROCESS,shell=True).pid
print pid
print 'done' 
#I can now close the console or anything I want and long_run.py continues!

注意:我添加了shell = True。 否则在子进程中调用print会给出错误“IOError:[Errno 9] Bad file descriptor”

DETACHED_PROCESS是一个进程创建标志 ,它传递给底层的WINAPI CreateProcess函数。

您可以将作业写入消息队列,而不是直接从Web应用程序启动进程。 单独的服务从消息队列中读取并运行作业。 看看Celery ,一个用Python编写的分布式任务队列。

这几乎可以工作( 从这里 ):

from subprocess import Popen

pid = Popen(["C:\python24\python.exe", "long_run.py"]).pid
print pid
print 'done'

“完成”将立即打印出来。 问题是上面的过程一直运行,直到long_run.py返回,如果我关闭进程,它会终止long_run.py的进程。

当然,有一些方法可以使一个过程完全独立于父过程。

subprocess.Popen做到了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM