下面是一個完整簡單的工作示例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