Python 多进程终止分块函数内的其他子进程



>我这里有一个非常缓慢和随机的函数。

我只想要 foo() 的第一个结果。

from random import randint
def foo(i): # Generating random number in a very slow way
    y = randint(1,1000000)
    while y != randint(1,1000000):
        pass
    return y

我想提高速度,所以我创建了几个进程,但它减慢了我的速度并给了我不需要的结果。

from multiprocessing import Pool
with Pool(processes = 8) as pool:
    result = pool.map(foo, [i for i in range(8)])
# A lot of time passed
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]

那么,是否无论如何都要终止分块函数中的其他子进程并像这样返回结果?

from random import randint
def foo(i): # Generating random number in a very slow way
    y = randint(1,1000000)
    while True:
        x = randint(1,1000000)
        if x == y:
            pool.terminateAllOtherSubprocesses()
            return y
from multiprocessing import Pool
with Pool(processes = 8) as pool:
    result = pool.barFunc(foo, [i for i in range(8)])
# Less than a second passed
>>> result
[42]

来自 python 文档: 在进程之间交换对象

相关内容

最新更新