我使用与子线程的几个线程。现在,我想停止亲本线程或等待直到父线线程完成工作,而无需检查和停止所有子线程。我的想法是用一个过程包裹父线程,然后终止该过程,这似乎终止了与所有子女的相应parent-thread。
。def worker(conn):
#this is the class including the parent thread
xi = Test_Risk_Calc('99082')
#start working
xi.test()
#finished
print ('EVERYTHING IS DONE, BUT CHILD THREADS ARE STILL ALIVE')
conn.send('EXIT SEND')
return
def main():
parent_conn, child_conn = Pipe()
p = multiprocessing.Process(target=worker, args=(child_conn,))
p.start()
#wait for finished parent-thread
print(parent_conn.recv())
p.terminate()
p.join()
print('JOINED, PROCESS AND ALL ITS THREADS ARE TERMINATED')
return
我不确定这是否是解决问题的正确方法
我认为可以像您这样做一样。但是,您可以避免总是有点"硬"的"终止"。
简单的解决方案是用参数" daemon = true"启动子线程。实际上,如果父母终止孩子,则会自动终止线程。
就像我之前说过的,这似乎有点干净,但最后,我认为是一样的。
编辑:
也许考虑使用Asyncio(异步/等待(进行并发编程。您可以使用
创建任务task = asyncio.create_task(my_task())
并稍后取消这些任务
task.cancel()
好处是,此"取消"给任务带来了异常。因此,在任务中,您可以做这样的事情:
async def my_task():
try:
... stuff ...
except asyncio.CancelledError:
... you can handle the cancellation, or ignore it
在Python中,任务不是很有用。对于并发执行,您可以更好地使用Asyncio,并且如果您有CPU结合任务,则可以使用多处理(也许以过程池的形式(。