2
我寫了一個使用多處理的python程序。該程序調用8位工作人員,休眠3秒後輸出一個隨機數。我希望程序在3秒鐘內完成,但在24秒內完成,就好像每個工作人員函數是按順序而不是並行計算的一樣。任何想法?我的python多處理程序按順序運行工作程序
import time
import numpy as np
import multiprocessing as mp
import time
import sys
def f(i):
np.random.seed(int(time.time()+i))
time.sleep(3)
res=np.random.rand()
print "From i = ",i, " res = ",res
if __name__=='__main__':
num_workers=mp.cpu_count() # My CPu has 8 cores.
pool=mp.Pool(num_workers)
for i in range(num_workers):
p=pool.apply_async(f, args=(i,))
p.get()
pool.close()
pool.join()
不過,如果我使用過程中,而不是游泳池,我得到預期正確的結果:
import time
import numpy as np
import multiprocessing as mp
import time
import sys
def f(i):
np.random.seed(int(time.time()+i))
time.sleep(3)
res=np.random.rand()
print "From i = ",i, " res = ",res
if res>0.7:
print "find it"
if __name__=='__main__':
num_workers=mp.cpu_count()
pool=mp.Pool(num_workers)
for i in range(num_workers):
p=mp.Process(target=f,args=(i,))
p.start()
您也可以使用'pool.map(f,range(num_workers))',它會爲您收集結果。 – Blckknght
@Blckknght,當然 - 我認爲OP的問題是他們真正想要做的事情的大大簡化,並且apply_async()在他們的真實應用中比map()更有意義。但是,當然,我不知道;-) –