感覺效果應該很好,但是看看這些代碼!初始化方法、線程跟蹤,最糟的是,如果你也和我一樣是個容易犯死鎖問題的人,這里的join語句就要出錯了。這樣就開始變得更加復雜了!
到現在為止都做了些什么?基本上沒什么。上面的代碼都是些基礎功能,而且很容易出錯。(天啊,我忘了寫上在隊列對象上調用task_done()方法(我懶得修復這個問題在重新截圖)),這真是性價比太低。所幸的是,我們有更好的辦法.
引入:Map
Map是個很酷的小功能,也是簡化Python并發代碼的關鍵。對那些不太熟悉Map的來說,它有點類似List.它就是序列化的功能映射功能. e.g.
urls = [', ']
results = map(urllib2.urlopen, urls)
這里調用urlopen方法,并把之前的調用結果全都返回并按順序存儲到一個集合中。這有點類似
results = []
for url in urls: results.append(urllib2.urlopen(url))
Map能夠處理集合按順序遍歷,最終將調用產生的結果保存在一個簡單的集合當中。
為什么要提到它?因為在引入需要的包文件后,Map能大大簡化并發的復雜度!

支持Map并發的包文件有兩個:
Multiprocessing,還有少為人知的但卻功能強大的子文件 multiprocessing.dummy. .