繁体   English   中英

Python多处理:退出时杀死工人

[英]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.

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