對於 C 語言,OpenMP 提供了一個簡單的平行程式碼機制。然而,Python 用戶在尋求類似功能時面臨挑戰。本指南旨在透過提出針對 Python 量身定制的解決方案來應對這些挑戰,使程式設計師能夠利用並行處理的力量來優化其程式碼。
具體來說,我們將探索一個涉及兩個獨立函數的場景,solve1(A ) 和solve2(B),需要並行執行而不是順序執行。提供的範例程式碼突顯了這些函數:
<code class="python">def solve(Q, G, n): ... setinneropt, partition, x = setinner(Q, G, n) ... if ... node1 = partition[0] node2 = partition[1] ...</code>
這裡的關鍵函數是 setinner 和 setouter,代表我們旨在並行化的獨立任務。
建議的方法是利用 Python 的多處理模組,特別是它的處理池。這些池採用通用工作進程,為電腦上的每個 CPU 核心分配一個工作進程。因此,多個工作進程可以同時執行已指派的平行任務。
對於我們的特定場景,程式碼將如下所示:
<code class="python">from multiprocessing import Pool pool = Pool() result1 = pool.apply_async(setinner, [Q, G, n]) # Evaluate "setinner(Q, G, n)" asynchronously result2 = pool.apply_async(setouter, [Q, G, n]) # Evaluate "setouter(Q, G, n)" asynchronously answer1 = result1.get(timeout=10) answer2 = result2.get(timeout=10)</code>
透過建立處理池,我們實質上委託了執行這些獨立的函數來分離進程,有效地實現並行處理。
需要注意的是,在Python中使用執行緒進行平行程式設計是不可取的,因為全域解釋器鎖定(GIL)會禁止同時操作Python 物件。因此,對於 Python 的平行程式設計工作,建議使用進程而不是執行緒。
以上是非同步並行化獨立 Python 函數的最佳方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!