2011-10-06 50 views
4

我有一個函數(例如myFunc),它的開始和結束日期爲&,它遍歷它並訪問一些字典來處理這段時間的數據。我正在尋找使用線程來並行化這段代碼。訪問相同字典的不同線程(只讀)

我的main()函數從一堆文件中讀入數據&將它們存儲在字典中。每次我打電話給myFunc時,我都會傳遞這些字典和一個開始日期。當我使用多個線程調用myFunc並傳遞相同的字典時,會不會有衝突?這些字典僅用於只讀目的。

myFunc創建了很多字典,然後寫入另一個文件。這個輸出文件對於每個線程都會有所不同,但是由於在所有線程中字典的命名都是相同的,是否會有衝突?理論上講,我理解線程的概念意味着只要這些字典不是全球性的,就不應該有衝突。但是自從我第一次嘗試線程以來,想要一些確認。

謝謝

回答

6

使用線程,不,你不會有問題。你也不會達到並行度。 Python中的全局解釋器鎖(GIL)只允許單個線程隨時處理。如果你想要真正的並行處理,你需要看看多處理模塊。它有能力在一臺機器上實際利用多個處理器。

+0

我沒有意識到這一點。謝謝。如果我使用多處理模塊,那麼對於我的問題,答案仍然是否定的? – user669815

+1

正是他所說的。要直接回答你的問題,_no_,不會有衝突。爲了更好地回答你的問題,你不能在Python中使用線程實現並行性;你需要使用[multiprocessing](http://docs.python.org/library/multiprocessing.html)。 –

+0

@ user669815 - 答案仍然不適用於這兩個問題。你的方法是正確的,你不能使用線程。 –