如何使PoolInterrupt敏感

时间:2015-02-12 20:55:07

标签: python multiprocessing

有没有办法手动退出多线程操作?这是我正在尝试做的事情:

pool = Pool(num_parallel_workers)
pool.map(update_completions_in_parallel, list_of_hits)
# press ctrl+c in middle of operation to 'exit' and return to CLI prompt
pool.close()
pool.join()

1 个答案:

答案 0 :(得分:3)

为什么不使用迭代或异步映射?这些很容易打断或杀死或者地图没有阻挡的任何东西。

在这里查看一个很好的用法示例: Python multiprocessing - tracking the process of pool.map operation

我使用pathos作为上面链接的答案,但也可以从普通的imap获得map_asyncmultiprocessing

>>> import multiprocessing as mp
>>> p = mp.Pool()   
>>> p.imap
<bound method Pool.imap of <multiprocessing.pool.Pool object at 0x109592c50>>
>>> p.map_async 
<bound method Pool.map_async of <multiprocessing.pool.Pool object at 0x109592c50>>

但是,如果您希望通过执行close然后join来终止已经启动的进程/线程...然后保存周期...您输入的内容(即close然后join)不起作用。您必须使用terminate来执行此操作...如果您计划之后触摸池或结果对象,则不建议终止pool。最好使用迭代/异步映射,然后当看到你有你想要的东西时 - 只需忽略其余的并继续前进。