2013-08-02 87 views
1

我是python的新手,我試圖對一個應用程序使用多處理。 我實際上有一個非常簡單的乘法程序,我試圖異步生成並行進程來計算一系列數字的乘法。當我嘗試不合並時,這個時間至少是原來的兩倍甚至四倍。我不確定這種行爲的原因是什麼。與非池相比,共用進程速度較慢

我使用Python 2.7.1

Non-Pool.py

#!/usr/bin/python 

import time 

def f(x): 
     return x*x 

st = time.time() 
t = 10000000 
f(t) 
map(f, range(t)) 

et = time.time() 
tt = (str((et-st)%60)+'--'+str((et-st/60))) 

print tt 

Pool.py

#!/usr/bin/python 

from multiprocessing import Pool 
import time 

def f(x): 
     return x*x 

st = time.time() 
t = 10000000 

if __name__ == '__main__': 
    pool = Pool(processes=4)    # start 4 worker processes 
    result = pool.apply_async(f, [t]) # evaluate "f(10)" asynchronously 
    result.get(timeout=1)   # prints "100" unless your computer is *very* slow 
    pool.map(f, range(t))   # prints "[0, 1, 4,..., 81]" 

et = time.time() 
tt = (str((et-st)%60)+'--'+str((et-st/60))) 

print tt 

exit(0) 

執行時間:(格式>>分 - 秒)

Macha-MacBook-Pro:Downloads me$ ./nonpool.py 
2.03456997871--1352551406.28 
Macha-MacBook-Pro:Downloads me$ ./pool.py 
4.69528508186--1352551417.28 
+0

可能是因爲創建子進程和與子進程通信的成本比僅進行進程內操作的成本高很多。 (只有在做一些比「方形數字」更復雜的東西時,纔會看到性能提升。)所用時間也將很大程度上取決於可用處理器/內核的數量 - 您創建的工作進程數通常應該與計算機中的處理器數量相同。 – cdhowie

回答

相關問題