從Multiprocessing.Process 實例中的函數中提取回傳值
從傳遞給multiprocessing.Process 的函數中檢索回傳值的能力可以是有用的功能,特別是在需要非同步任務執行時。不幸的是,這些值無法立即從 Process 物件存取,因此需要採用替代方法。
理解值儲存
與傳統的 Python 函數不同,傳遞給 multiprocessing.Process 的函數沒有傳回值屬性。相反,該值儲存在單獨的位置,特別是共享記憶體物件中。這是因為使用多處理創建的進程在單獨的記憶體空間中運行,從而阻止了直接存取主進程中的變數。
使用共享變數進行通訊
存取回傳值後,我們需要在進程之間建立一種通訊形式。一種有效的方法是利用共享變數。這些物件允許多個進程同時共享和存取資料。在我們的例子中,我們使用 multiprocessing.Manager() 建立一個管理器物件和一個共用字典。字典充當共享變數。
存取回傳值
在輔助函數中,我們使用所需的回傳值來填入共用字典。主進程在等待所有任務完成後,可以從共用字典中存取和檢索這些值。透過採用這種策略,我們可以有效地提取返回值,而不會影響多處理方法。
範例實作
以下範例顯示了共享變數擷取回傳值的實作值:
import multiprocessing def worker(procnum, return_dict): """worker function""" print(str(procnum) + " represent!") return_dict[procnum] = procnum if __name__ == "__main__": manager = multiprocessing.Manager() return_dict = manager.dict() jobs = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i, return_dict)) jobs.append(p) p.start() for proc in jobs: proc.join() print(return_dict.values())
輸出:
0 represent! 1 represent! 3 represent! 2 represent! 4 represent! [0, 1, 3, 2, 4]
這種方法使我們能夠檢索工作函數的返回值並演示進程之間的無縫通訊多處理框架。
以上是如何從 Python 中的 multiprocessing.Process 實例中檢索回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!