跨多個進程共享結果
在多處理中,在不同進程之間共享資源(例如隊列)可能是一個挑戰。本文探討如何使用 apply_async 函數在多個非同步工作進程之間共用結果佇列。
提供的範例程式碼使用 multiprocessing.Process,由於透過繼承跨進程共享佇列物件的限製而失敗。為了克服這個限制,multiprocessing.Manager 類別提供了一個解決方案。
使用 multiprocessing.Manager
multiprocessing.Manager 提供了一種建立和管理物件的方法,可以跨進程共享。以下程式碼示範如何使用 Manager 在工作進程之間共用佇列:
<code class="python">import multiprocessing def worker(name, que): que.put("%d is done" % name) if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) m = multiprocessing.Manager() q = m.Queue() workers = pool.apply_async(worker, (33, q))</code>
透過使用 m.Queue() 而不是 multiprocessing.Queue(),佇列由 Manager 物件建立和管理。這允許工作進程存取和修改佇列,而不會遇到「佇列物件只能透過繼承在進程之間共用」錯誤。
以上是如何在多處理中的多個非同步工作進程之間共用佇列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!