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

2024-05-23 19:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python web应用程序,需要启动一个长时间运行的进程。关键是我不想让它等着整个过程结束。启动并完成。

我在windows XP上运行,web应用在I is下运行(如果这很重要的话)。

到目前为止,我试过波本,但似乎没用。它一直等到子进程完成。


Tags: web应用程序进程is过程windowsxp关键
3条回答

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

好吧,我终于明白了!这似乎有效:

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]错误的文件描述符”

DETACHED_PROCESS是传递给底层WINAPICreateProcess函数的Process Creation Flag

这几乎可以工作(from here):

from subprocess import Popen

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

“完成”将立即打印。问题是,上面的进程一直在运行,直到long_run.py返回,如果我关闭该进程,它将杀死long_run.py的进程。

当然,有某种方法可以使进程完全独立于父进程。

相关问题 更多 >