我希望在一个进程中运行一些线程。主要过程应告诉该过程何时停止。我想知道以下代码是否是最好的方法。特别是,我认为行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()
答案 0 :(得分:-1)
请完成 - reversed
多线程'池'需要在join()之前调用close()方法。
所以在代码中的stop()方法中 - 在pool.join()之前调用pool.close()应该可以解决问题。
def stop(self):
self.finished = True
if self.is_alive():
self.close()
self.join()
如果您仍然遇到问题,请告诉我。