gpt4 book ai didi

python - 如何在后台放置一个进程,使其不会中断我的返回?

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:56 24 4
gpt4 key购买 nike

我的 Django 站点急需这个,但由于时间限制,我不能做任何大的修改。这可能是成本最低的就地修改。

如果我们只关注 buildrun...

  1. 现在我从 build(或运行)中获取了 id。

  2. 所有繁重的工作现在都在一个单独的函数中进行。

'

import multiprocessing as mp
def main():
id = get_build_id(....)
work = mp.Process(target=heavy_build_fn)
work.start()
return id

如果我在 shell 中运行它(我没有在实际的 Django 应用程序上测试过它),终端将不会完全结束,直到 work 进程完成它的工作。作为网络应用程序,我需要立即返回 id。我可以将 work 放在后台而不打扰吗?

谢谢。

我读过这个How do I run another script in Python without waiting for it to finish? ,但我想知道其他方法,例如,坚持使用 MP。 Popen 解决方案可能不是我真正想要的。


import multiprocessing as mp
import time

def build():
print 'I build things'
with open('first.txt', 'w+') as f:
f.write('')

time.sleep(10)
with open('myname.txt', 'w+') as f:
f.write('3')
return

def main():
build_p = mp.Process(name='build process', target=build)
build_p.start()
build_p.join(2)
return 18

if __name__ == '__main__':

v = main()
print v
print 'done'

控制台:

I build things
18
done
|

等待

最后

user@user-P5E-VM-DO:~$ python mp3.py
I build things
18
done
user@user-P5E-VM-DO:~$

最佳答案

删除join(),你可能会得到你想要的。join() 在返回之前等待进程结束。

该值将在子进程完成之前返回,但是,您的父进程将一直存在,直到子进程完成。不确定这对您来说是否是个问题。

这段代码:

import multiprocessing as mp
import time

def build():
print 'I build things'
for i in range(10):
with open('testfile{}.txt'.format(i), 'w+') as f:
f.write('')
time.sleep(5)


def main():
build_p = mp.Process(name='build process', target=build)
build_p.start()
return 18

if __name__ == '__main__':

v = main()
print v
print 'done'

返回:

> python mptest.py
18
done
I build things

如果您需要在子进程继续时允许进程结束,请查看此处的答案:

Run Process and Don't Wait

关于python - 如何在后台放置一个进程,使其不会中断我的返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com