终止线程和子线程



我使用与子线程的几个线程。现在,我想停止亲本线程或等待直到父线线程完成工作,而无需检查和停止所有子线程。我的想法是用一个过程包裹父线程,然后终止该过程,这似乎终止了与所有子女的相应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结合任务,则可以使用多处理(也许以过程池的形式(。

相关内容

  • 没有找到相关文章

最新更新