>我这里有一个非常缓慢和随机的函数。
我只想要 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 文档: 在进程之间交换对象