gpt4 book ai didi

python - 如何停止 multiprocessing.Process

转载 作者:行者123 更新时间:2023-11-28 19:29:27 25 4
gpt4 key购买 nike

我希望在一个进程中运行几个线程。主进程应该告诉这个进程什么时候停止。我想知道以下代码是否是执行此操作的最佳方法。特别是,我认为行 while not self.event.is_set(): time.sleep(1) 很奇怪,但也许是最好的解决方案。

import threading
import multiprocessing
import time

class T(threading.Thread):
def __init__(self):
super(T, self).__init__()
self.finished = False

def run(self):
while not self.finished:
print("*")
time.sleep(1)

def stop(self):
self.finished = True
if self.is_alive(): self.join()


class P(multiprocessing.Process):
def __init__(self):
super(P, self).__init__()
self.event = multiprocessing.Event()

self.t1 = T()
self.t2 = T()

def run(self):
self.t1.start()
self.t2.start()
while not self.event.is_set(): time.sleep(1)
self.t1.stop()
self.t2.stop()

def stop(self):
self.event.set()
self.join()

p = P()
try:
p.start()
time.sleep(3)
finally:
p.stop()

最佳答案

请通过 - https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.join多线程“池”需要在 join() 之前调用方法 close()。因此,在代码的 stop() 方法中 - 在 pool.join() 之前调用 pool.close() 应该可以解决问题。

def stop(self):
self.finished = True
if self.is_alive():
self.close()
self.join()

如果您仍然遇到问题,请告诉我。

关于python - 如何停止 multiprocessing.Process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526578/

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