【发布时间】:2014-05-17 23:31:53
【问题描述】:
我在使用池时遇到了问题,所以我需要用一些替代方法来改变它。
我尝试joblib.Parallel,但它的工作方式更类似于map,而不是imap,但我希望获得像迭代器一样的结果,并且能够在第一个可用的结果时立即开始处理,而不是等待其他人完成.
【问题讨论】:
标签: python multithreading python-2.7 multiprocessing jobs
我在使用池时遇到了问题,所以我需要用一些替代方法来改变它。
我尝试joblib.Parallel,但它的工作方式更类似于map,而不是imap,但我希望获得像迭代器一样的结果,并且能够在第一个可用的结果时立即开始处理,而不是等待其他人完成.
【问题讨论】:
标签: python multithreading python-2.7 multiprocessing jobs
您可以将pool.apply_async 与回调函数一起使用,该函数将在每个回调函数完成时调用。
回调只能接受一个参数,所以如果你的函数返回不止一个东西,你的回调函数需要意识到这一点并解包参数(它将接收一个参数,一个元组,包含返回值函数。)
例子:
from multiprocessing import Pool
import time
def f(x):
time.sleep(1/(x * 100))
return x**2
def callback(value):
print(value)
# in Python 3.3 you can use a context manager with the pool.
pool = Pool(3)
for value in range(10):
pool.apply_async(f, (value,), callback=callback)
pool.close()
pool.join()
【讨论】: