python - 多处理池 - 如果返回所需结果,如何取消所有正在运行的进程?

标签 python dictionary multiprocessing pool

给定以下 Python 代码:

import multiprocessing

def unique(somelist):
    return len(set(somelist)) == len(somelist)


if __name__ == '__main__':
    somelist = [[1,2,3,4,5,6,7,8,9,10,11,12,13,2], [1,2,3,4,5], [1,2,3,4,5,6,7,8,9,1], [0,1,5,1]]

    pool = multiprocessing.Pool()
    reslist = pool.map(unique, somelist)
    pool.close()
    pool.join()
    print "Done!"

    print reslist

现在想象一下,这个玩具示例中的整数列表非常长,我想在这里实现的是:如果 somelist 中的一个列表返回 True,则终止所有正在运行的进程。

这会引出两个问题(可能还有更多我没有想到的问题):

  • 如何在其他进程正在运行时从已完成的进程“读取”或“收听”结果?如果例如一个进程正在处理 somelist 中的 [1,2,3,4,5],并且在所有其他进程之前完成,我如何从中读取结果就在此时此刻?

  • 鉴于可以在其他进程正在运行时“读取”已完成进程的结果的情况:如何使用此结果作为终止所有其他正在运行进程的条件?
    < br/> 例如如果一个进程已完成并返回 True,我如何将其用作终止所有其他(仍在)运行的进程的条件?

最佳答案

使用 pool.imap_unordered 以出现的任何顺序查看结果。

reslist = pool.imap_unordered(unique, somelist)
pool.close()
for res in reslist:
    if res:  # or set other condition here
        pool.terminate()
        break
pool.join()

当池进程仍在生成结果时,您可以在主进程中迭代 imap reslist。

关于python - 多处理池 - 如果返回所需结果,如何取消所有正在运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39429243/

相关文章:

python - 从列表框中删除选择,以及从提供它的列表中删除它

python - 如何在 Python 中解压复杂的嵌套列(字典的字典列表)? [推特广告 API]

python - For 循环应该向字典添加条目但只保留一个

python - 为什么 Python 的多处理模块在 Windows 上启动新进程时会导入 __main__?

python - 将字符串附加到 for 循环中的列表

python - 基于另一种阵列形状的零焊盘阵列

python - 在 2D Python 数字字典中插入值

c++ - 检查线是否穿过二维 map 上的墙

python - multiprocessing.Queue 中的 ctx 参数

python - 多处理for循环?