这是一个完整的简单工作示例
import multiprocessing as mp
import time
import random
class Foo:
def __init__(self):
# some expensive set up function in the real code
self.x = 2
print('initializing')
def run(self, y):
time.sleep(random.random() / 10.)
return self.x + y
def f(y):
foo = Foo()
return foo.run(y)
def main():
pool = mp.Pool(4)
for result in pool.map(f, range(10)):
print(result)
pool.close()
pool.join()
if __name__ == '__main__':
main()
我该如何修改它,以便 Foo 仅由每个工作人员而不是每个任务初始化一次?基本上我希望 init 被调用 4 次,而不是 10 次。我使用的是 python 3.5
处理此类事情的预期方法是通过可选的initializer
and initargs
的论点Pool()
构造函数。它们的存在正是为了让您能够在创建工作进程时只执行一次操作。因此,例如,添加:
def init():
global foo
foo = Foo()
并改变Pool
创作到:
pool = mp.Pool(4, initializer=init)
如果您需要将参数传递给每个进程的初始化函数,那么您还需要添加适当的initargs=...
争论。
注意:当然你还应该删除
foo = Foo()
行自f()
,这样你的函数uses全球的foo
由...制作init()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)