多處理全域變數更新未傳回父進程
當利用多處理建立輔助進程時,會創建一個具有自己的不同的Python 實例全域狀態。這種全域狀態是隔離的,使得子程序對全域變數所做的任何修改對父進程都是不可見的。
此外,大多數多處理抽像都利用 pickle 來傳輸資料。透過代理傳送的所有資料都必須是可pickle的,包括管理器提供的所有物件。管理器部分強調其他程序可以使用代理程式存取共用物件。
類似的限制也適用於佇列,儘管文件省略了此資訊。快速測試確認佇列中的所有資料也必須是可pickle的。
如果pickle您的資料仍然不可行,請考慮將其儲存為ctype物件並將記憶體參考傳遞給子進程。這種方法有一定風險,應該保留在其他選項都用盡的情況下。
就您而言,了解 LORR 的複雜性至關重要。如果它是一個 Python 類,則從其子類化並定義 setstate 和 getstate 方法可能會有助於 pickling。
或者,從 LORR 實例中提取所需的資料並將其傳遞通過一個簡單的字串就足夠了。考慮利用佇列在主進程和子進程之間傳送訊息,以直接呼叫物件方法,如上圖所示。
以上是如何在多處理中更新子進程的全域變數並確保父進程可以存取它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!