首頁 >後端開發 >Python教學 >如何從 multiprocessing.Process 函數擷取回傳值?

如何從 multiprocessing.Process 函數擷取回傳值?

Patricia Arquette
Patricia Arquette原創
2024-11-29 06:30:12800瀏覽

How to Retrieve Return Values from multiprocessing.Process Functions?

如何從傳遞給multiprocessing.Process 的函數中檢索回傳值

將函數傳遞給multiprocessing.Process 時,通常需要檢索函數的回傳值。但是,這些值在傳回的 Process 物件中不容易存取。

請考慮以下代碼:

import multiprocessing

defworker(procnum):

'''worker function'''
print str(procnum) + ' represent!'
return procnum

如果名字== '__main__':

jobs = []
for i in range(5):
    p = multiprocessing.Process(target=worker, args=(i,))
    jobs.append(p)
    p.start()

for proc in jobs:
    proc.join()
print jobs

預期的回傳值無法透過 'jobs' 中的 Process 物件取得。

解決方案:使用共享變數

為了檢索回傳值,可以利用共享變數來啟用主進程與工作進程之間的通訊

導入多處理

defworker(procnum, return_dict):

"""worker function"""
print(str(procnum) + " represent!")
return_dict[procnum] = procnum

if 名稱 == "__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())

解釋:

  • 多處理管理器用於建立共享字典“return_dict”。
  • 每個工作進程存取共享的「return_dict」並將其傳回值儲存在其進程號下key。
主程序透過存取字典的值來擷取回傳值。

以上是如何從 multiprocessing.Process 函數擷取回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn