2016-05-16 29 views
1

所以,我有一個9000行的csv文件。我已經閱讀並將其存儲在字符串鍵列表m中。我想要做的是循環每個項目list[m]並將其處理爲函數processItem(item)。這processItem將返回一個類似csv格式的字符串。我的目標是爲列表中的每個項目寫入processItem函數的結果。有什麼想法如何做這種多線程的方式?使用Python的多線程讀寫文件

我想我應該將列表分成N個子列表,然後以多線程方式處理這些子列表。每個線程都會返回從子列表中處理的字符串,然後合併它。最後把它寫入一個文件。如何實現?

回答

5

這是使用multiprocessing模塊和Pool()功能(請注意,threading模塊不能用於速度)的完美示例。

您必須在列表中的每個元素上應用一個函數,因此可以很容易地將其並行化。

with Pool() as p: 
    processed = p.map(processItem, lst) 

如果您正在使用Python 2,Pool()不能用作上下文管理器,但你可以使用它像這樣:

p = Pool() 
processed = p.map(processItem, lst) 

你的功能processItem()將在您的lst呼籲每個元素,結果會創建一個新列表processed(訂單被保留)。

函數Pool()產生儘可能多的進程工作程序,以確保您的CPU具有核心,並且在前一個完成後立即執行新任務,直到處理完每個元素。

+0

謝謝您的建議。我會盡力實現這一點。 – Bharata