【发布时间】:2020-02-27 06:45:41
【问题描述】:
考虑一个子进程的简单设置。基本上是生产者(父)-消费者(子)的场景。
class Job:
def start_process(self):
self.queue = multiprocessing.Queue(3)
self.process = multiprocessing.Process(target=run,
args=(self.queue))
def run(queue):
while True:
item = queue.get()
....
如果我在父进程上执行kill -9,子进程将永远挂起。我确信它会像subprocess.Popen 一样收到SIGHUP - 当python 进程退出时,popened 也会退出。知道如何解决子清理问题吗?
【问题讨论】:
-
如果您在调用
multiprocessing.Process()时提供了daemon=True参数,则子进程将在主进程结束时自动被杀死(假设您使用的是 Python 3.3+)。 -
必须使用 pypy 并使用 2.7 ((.
-
不知道 pypi 是如何影响事物的,但是对于早期版本的 Python,您可以在调用
start()方法之前使用self.process.daemon = True手动设置属性。 -
@martineau 不起作用 - 孤儿仍在挂起。
-
@martineau 这不是 PyPI 它是 PyPy,我已经谈过了,是的,它与问题无关。
标签: python python-2.7 multiprocessing python-multiprocessing