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!
您可以将作业写入消息队列,而不是直接从webapp启动进程。一个单独的服务从消息队列中读取并运行作业。看看Celery,一个用Python编写的分布式任务队列。
好吧,我终于明白了!这似乎有效:
注意:我添加了shell=True。否则,在子进程中调用print会给出错误“IOError:[Errno 9]错误的文件描述符”
DETACHED_PROCESS
是传递给底层WINAPICreateProcess函数的Process Creation Flag。这几乎可以工作(from here):
“完成”将立即打印。问题是,上面的进程一直在运行,直到long_run.py返回,如果我关闭该进程,它将杀死long_run.py的进程。
当然,有某种方法可以使进程完全独立于父进程。
相关问题 更多 >
编程相关推荐