首頁 > 後端開發 > Python教學 > 如何從 Python 中的 multiprocessing.Process 實例中檢索回傳值?

如何從 Python 中的 multiprocessing.Process 實例中檢索回傳值?

Patricia Arquette
發布: 2024-11-28 11:48:12
原創
599 人瀏覽過

How Can I Retrieve Return Values from multiprocessing.Process Instances in Python?

從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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板