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()
其中,
-
pool()帶參數,如果不帶,則默認使用系統的內核數,也可以自己加上內核數,比如4.
-
funtion,是一個處理函數 ,而處理的對象作為一個參數,傳入該函數,如果對象有多個,可以先生成一個列。
-
使用pool.map()傳入函數和參數隊列。
-
返回的結果,也是以一個列進行保存。
使用上有限制,你要處理的對象(函數的參數)必須是已知的,存放于一個隊列中。然后使用map來進行處理。pool的作用是把內核都使用起來。這里我認為使用默認的內核數比較好。與傳統的thread比較,其優勢在于,對于處理已知的對象,可以更快,而對于未知的對象(對象不確定,不能簡單的生成一個隊列來處理),還是使用傳統的thread更加合適。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!