如何使池对 KeyboardInterrupt 敏感
How to make Pool sensitive of KeyboardInterrupt
有没有办法手动退出多线程操作?这是我正在尝试做的事情:
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()
为什么不直接使用迭代或异步映射?由于地图没有阻塞,因此很容易打断或杀死它们。
在这里查看一个很好的用法示例:
我在上面链接的答案中使用了 pathos
,但也有 imap
和 map_async
可以从普通的 multiprocessing
.
获得
>>> 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
来终止已经启动的 processes/threads 然后 join
... 然后保存周期...您输入的内容(即 close
然后 join
) 是行不通的。你必须使用 terminate
来做到这一点……如果你打算之后接触池或结果对象,则不建议终止 pool
。最好使用 iterated/asynchronous 地图,然后当你看到你想要的东西时 - 只需 忽略 其余的并继续前进。
有没有办法手动退出多线程操作?这是我正在尝试做的事情:
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()
为什么不直接使用迭代或异步映射?由于地图没有阻塞,因此很容易打断或杀死它们。
在这里查看一个很好的用法示例:
我在上面链接的答案中使用了 pathos
,但也有 imap
和 map_async
可以从普通的 multiprocessing
.
>>> 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
来终止已经启动的 processes/threads 然后 join
... 然后保存周期...您输入的内容(即 close
然后 join
) 是行不通的。你必须使用 terminate
来做到这一点……如果你打算之后接触池或结果对象,则不建议终止 pool
。最好使用 iterated/asynchronous 地图,然后当你看到你想要的东西时 - 只需 忽略 其余的并继续前进。