我有這樣的程序:Pool.map VS Pool.map_async
from multiprocessing import Pool
import time
def f(x):
# I make a heavy code here to take time
for i in range(10000):
for i in range(10000):
pass #do nothing
print x #print x
if __name__ == '__main__':
pool = Pool(processes=4)
pool.map(f, range(10))
r = pool.map_async(f, range(10))
# DO STUFF
print 'HERE'
print 'MORE'
r.wait()
print 'Done'
據我所知,pool.map
將返回順序,而pool.map_async
不會。 我試圖找出它們之間的差異,但我還沒有得到它。
Accutually,我看了一些帖子,例如:Python multiprocessing : map vs map_async
,但我仍然感到困惑。 我的問題是:
- 這兩個函數有什麼區別?
- 當運行上述代碼中,我得到這樣的:
1 3 2 0 4 6 5 7 8 9該處MORE 1 0 3 2 5 4 6 7 8 9完成
我預計pool.map
將按順序返回輸出,但它沒有! 那麼,爲什麼沒有按順序返回呢?或者我誤解了這個功能?
- 我覺得當
pool.map
叫,主(下面的代碼,像
r = pool.map_async(f, range(10));
print 'HERE';
print 'MORE'
被繼續運行。因此,我希望 「在這裏」 和「更多「被印刷在數之間,我的意思是這樣 如果我評論的重碼,所述
f
功能剛纔是:def f(x):
print x
3 2 0 4 6 5 HERE 7 8 9 1 0 3 2 5 MORE 4 6 7 8 9完成
但它發生在其他方面。 爲什麼不按我的預期運行?
然後兩者的功能將返回(我試了很多次,總是打印相同的結果。 那麼,爲什麼它的行爲不同時,它的/沒有沉重代碼。
任何幫助,將不勝感激。 謝謝。