2012-04-08 78 views
-1

我基本上試圖編寫一個mapreduce的多核版本來查看我是否得到了這個概念。並且還想學習Python中的線程。Python中的線程示例

我已經說了兩個字符串文本字符串。

如何使用多線程同時處理它們(讓我們將它們標記爲單詞)。 我以爲我理解文檔,但這是一個部分(多線程程序),如果它必須高效,必須非常小心。 有什麼建議嗎?

+1

版面中的CPython(標準Python實現)不適合服用多核心的優勢,在至少如果你正在編寫純Python代碼。您應該改用多個進程。 – 2012-04-08 21:10:03

+1

您將遇到的問題是Python並不真正支持多線程。全局解釋器鎖可以防止兩段代碼真正同時運行。 – Alex 2012-04-08 21:10:05

+1

我沒有看到合理範圍的具體技術問題。 「給我一個多線程字符串標記化的例子」在這裏並不是真正的主題。一旦你嘗試過,並且遇到了特定的障礙,請詢問一下。 – agf 2012-04-08 21:14:25

回答

1

我建議您嘗試使用multiprocessing模塊,並使用其map()方法。這將使您可以高效地使用多個內核。

由於在Python解釋器中進行了耗時的鎖定,Python線程效率不如它可能高。有一個threading模塊,但您可能更喜歡使用multiprocessing模塊來解決問題。

此外,如果你想確保你瞭解地圖/縮小,爲什麼不玩一個真正的地圖/縮小系統? Hadoop是一個免費提供的軟件的map/reduce系統,並且可以使用Python使用Hadoop:

http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

+0

嗨。該鏈接中的代碼本質上是順序的?對??它只使用單核。對?? – Fraz 2012-04-08 23:22:47

+0

該鏈接中的代碼是爲Hadoop編寫的。 Hadoop可能可以運行在單個內核上進行測試,但它可以在羣集上運行,並將工作分散到同時運行的多臺計算機上。您可以編寫'mapper.py'(可能運行在單個內核上)和'reduce.py'(可能運行在單個內核上),Hadoop會指出如何在覈心和/或計算機之間並行化工作。 http://en.wikipedia.org/wiki/Apache_Hadoop – steveha 2012-04-08 23:31:53