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

2024-04-30

给出以下 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,则终止所有正在运行的进程。

这导致了两个问题(可能还有更多我没有想到的问题):

  • 当其他进程正在运行时,如何从已完成的进程中“读取”或“侦听”结果?如果例如一个进程正在处理[1,2,3,4,5] from somelist,并且先于所有其他进程完成,此时我如何读出该进程的结果?

  • 假设可以在其他进程运行时“读出”已完成进程的结果:如何使用此结果作为终止所有其他正在运行的进程的条件?

    例如如果一个进程已完成并返回True,我如何使用它作为终止所有其他(仍在)运行的进程的条件?


Use 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当池进程仍在生成结果时,在主进程中重新列出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多处理池 - 如果一个进程返回所需的结果,如何取消所有正在运行的进程? 的相关文章

随机推荐