我想執行以下任務:在主程序'main.py'中,我定義了一些輸入參數,使用函數f()和存儲結果。函數f()和一些參數在中央模塊「test.py」中定義。Python多重處理:避免在進程之間通過模塊進行通信
我必須爲大量參數做這件事,因此要給每個CPU一組參數,執行計算並返回結果,然後將結果存儲在數組'data'中。
問題:每個進程都需要訪問和定義模塊'test.py'中的值,我希望避免進程之間的任何通信/干擾。
我附上了一個最小的工作示例。主文件main.py和模塊test.py
如果一個執行人們可以看出在「數據」的結果是正確的計算,但打印語句返回對(A,B)不對應於默認值。
起初,我想了解這裏發生了什麼。看來,每個進程打印(a,b)由先前的進程定義,然後定義新的值併產生正確的結果。其次,目前該程序可以工作(即使對於較大的數據集和更復雜的計算),但我不想冒着由進程之間的干擾導致錯誤結果的風險。有沒有辦法避免流程之間的任何溝通?也許每個進程都獲得模塊的副本,並使用此副本進行計算?
是的,打印語句返回它在當時獲得的模塊對(a,b)。但是,這並不是真正的可預測性,我不明白爲什麼計算結果仍然正確。我的意思是,一名童工可以重新定義t.a,t.b,而另一名童工使用這個數值來給出錯誤的結果。 我想你的建議沒有辦法做出一個包含參數的結構。缺點是我必須在整個程序中攜帶包含大量參數的結構。我會考慮的,謝謝。 – hauntergeist
我在配對之前就有這個問題,這取決於你的「a」和「b」值多久改變一次,我假設這只是一個代表性的功能,因爲你不能公開你的真實源代碼。如果許多具有不同s值的對象使用相同的a和b,並且希望將它們從內存中移除,則可以使用3層系統,其中祖父進程使用a和b值創建父進程,然後創建s值列表它映射到。如果計算完成,你可以結束父進程清除內存。 – PythonFan