[英]Python multiprocessing: Kill worker on exit
我编写了一个简单的函数来运行具有依赖关系跟踪的作业。 确切的代码并不重要,但我这样做的方法是创建一个作业监控功能,我用multiprocessing.Process
分叉,我使用两个多处理Queue
对象向它发送和从它获取作业。
它工作得很好,但是因为我使用了无限循环,当父进程在退出时挂起时,因为 python 仍在等待子进程。 有没有一种在退出时立即杀死子进程的好方法? 也许通过捕捉信号?
我的实际代码在这里: https : //gist.github.com/MikeDacre/e672969aff980ee950b9dfa8b2552d40一个更完整的例子在这里: http : //nbviewer.jupyter.org/github/MikeDacre/python-cluster/blob/cluster/tests/ local_queue.ipynb
不过,玩具示例可能更好:
import multiprocessing as mp
from time import sleep
def runner():
while True:
sleep(2)
runner = mp.Process(target=runner)
runner.start()
exit()
这将很高兴地挂起,直到输入 Ctrl-C。
我不认为信号捕捉会起作用,因为在正常退出时没有发送信号。 有什么办法可以捕获exit()
吗? 如果没有,有没有办法以自然终止的方式创建进程?
谢谢大家,在写完这个问题后不久,我找到了使用 python 的atexit
模块的解决方案:
import atexit
import multiprocessing as mp
from time import sleep
def runner():
while True:
sleep(2)
def kill_runner(runner):
runner.terminate()
runner = mp.Process(target=runner)
runner.start()
atexit.register(kill_runner, runner)
exit()
这按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.