下面是一个完整简单的工作示例Optimzing multiprocessing.Pool昂贵的初始化
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()
如何修改它,以便美孚仅由每个工人,不是每一个任务初始化一次?基本上我想在init称为4倍,而不是10。我使用Python 3.5
如果该类初始化一次,然后复制到每个工作人员,会好吗? –
@BrendanAbel我认为是。那意味着对象必须是可以腌制的?该对象在初始化后永远不会发生变化,所以我不知道为什么复制会很糟糕。 – user2133814
多处理与多线程不同。他们有很大不同的特点。 – jpmc26