【发布时间】:2016-12-12 06:12:00
【问题描述】:
这是一个完整的简单工作示例
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
【问题讨论】:
-
如果类只初始化一次,然后复制到每个worker,会不会很好?
-
@BrendanAbel 我想是的。这意味着对象必须是可腌制的?该对象在初始化后永远不会发生变异,所以我不知道为什么复制会不好
-
多处理不与多线程相同。它们具有截然不同的特征。
-
抱歉问题标题中的混淆
标签: python python-3.5 python-multiprocessing pool object-initializers