python 線程

jopen 10年前發布 | 26K 次閱讀 Python開發 Python

對比threading ,自己建立線程池。與python提供模塊,multiprocessing.dummy, pool,map的運用

引入:Map

Map是個很酷的小功能,也是簡化Python并發代碼的關鍵。對那些不太熟悉Map的來說,它有點類似Lisp.它就是序列化的功能映射功能. e.g.

urls = [', ']
results = map(urllib2.urlopen, urls)

這里調用urlopen方法,并把之前的調用結果全都返回并按順序存儲到一個集合中。這有點類似

results = []
for url in urls: 
    results.append(urllib2.urlopen(url))

Map能夠處理集合按順序遍歷,最終將調用產生的結果保存在一個簡單的集合當中。

示例:

from multiprocessing.dummy import Pool
...
pool = Pool()
pool.map(funtion,funtion_para_list)  
pool.close() 
pool.join()

其中,

  1. pool()帶參數,如果不帶,則默認使用系統的內核數,也可以自己加上內核數,比如4.

  2. funtion,是一個處理函數 ,而處理的對象作為一個參數,傳入該函數,如果對象有多個,可以先生成一個列。

  3. 使用pool.map()傳入函數和參數隊列。

  4. 返回的結果,也是以一個列進行保存。

使用上有限制,你要處理的對象(函數的參數)必須是已知的,存放于一個隊列中。然后使用map來進行處理。pool的作用是把內核都使用起來。這里我認為使用默認的內核數比較好。與傳統的thread比較,其優勢在于,對于處理已知的對象,可以更快,而對于未知的對象(對象不確定,不能簡單的生成一個隊列來處理),還是使用傳統的thread更加合適。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!