我正在尝试学习joblib
模块,作为Python内置的multiprocessing
模块的替代品。我通常使用multiprocessing.imap
在可迭代对象上运行函数,并在结果返回时返回结果。在这个最小工作示例中,我无法弄清如何使用joblib:
import joblib, time
def hello(n):
time.sleep(1)
print "Inside function", n
return n
with joblib.Parallel(n_jobs=1) as MP:
func = joblib.delayed(hello)
for x in MP(func(x) for x in range(3)):
print "Outside function", x
这将打印:
Inside function 0
Inside function 1
Inside function 2
Outside function 0
Outside function 1
Outside function 2
我希望看到输出结果:
Inside function 0
Outside function 0
Inside function 1
Outside function 1
Inside function 2
Outside function 2
或者类似的内容,表明可迭代对象MP(...)
不会等待所有结果完成。对于更长的演示,请将n_jobs=-1
和range(100)
进行更改。
callback
中的结果将是一个结果列表。此外,如果您想捕获当前活动的后端,可以让ImmediateResultBackend
继承自type(joblib.parallel.get_active_backend()[0])
。像这样:class ImmediateResultBackend(type(joblib.parallel.get_active_backend()[0])): ...
。最后,可能有意义的是使用del joblib.parallel.BACKENDS["custom"]
取消注册后端。 - Martin Becker