使用多重處理時,如果共享唯讀資料複製到不同的進程,就會出現問題。如果是這樣,如何防止或鼓勵這種複製?
提供的程式碼片段,它在多個進程執行的函數中使用全域數組作為預設參數,引起對記憶體重複的擔憂。為了防止各個進程獲取資料的單獨副本,請考慮利用共享記憶體。
可以將多處理和Numpy 結合起來以有效地共享資料:
<code class="python">import multiprocessing import ctypes import numpy as np shared_array_base = multiprocessing.Array(ctypes.c_double, 10*10) shared_array = np.ctypeslib.as_array(shared_array_base.get_obj()) shared_array = shared_array.reshape(10, 10)</code>
在每一個>每在一個進程執行的函數中,對共享數組所做的更改對所有進程都是可見的:
<code class="python">def my_func(i, def_param=shared_array): shared_array[i,:] = i</code>
相應的此問題的機制取決於應用程式的具體要求和存取模式。共享記憶體提供了一種有效的方法來防止這種情況下的資料重複,確保多個進程之間的共享存取。
以上是應該在多處理環境中複製唯讀共享資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!