首頁 >後端開發 >Python教學 >在 Python 多處理中我應該使用哪一種池方法?

在 Python 多處理中我應該使用哪一種池方法?

Patricia Arquette
Patricia Arquette原創
2024-11-03 13:58:31835瀏覽

Which Pool Method Should I Use in Python Multiprocessing?

Multiprocessing.Pool:我該用哪一種方法?

Multiprocessing 允許 Python 跨多個進程同時執行函數。然而,選擇合適的方法可能會令人困惑,特別是在考慮 Pool.apply、Pool.apply_async 和 Pool.map 時。讓我們澄清它們的差異和用例:

Pool.apply vs. Pool.apply_async vs. Pool.map

1. Pool.apply:

  • 在單獨的進程中呼叫函數並阻塞目前進程,直到函數返回。
  • 當您需要執行單一函數呼叫並且立即等待結果。

2. Pool.apply_async:

  • 與 Pool.apply 類似,在單獨的進程中呼叫函數,但立即傳回。
  • 傳回一個 AsyncResult 對象,讓您可以擷取
  • 支援在結果可用時呼叫的回呼函數。
  • 對於非同步處理多個函數呼叫很有用。

3. Pool.map:

  • 對一系列參數並行呼叫相同的函數。
  • 阻塞,直到得到所有結果。
  • 保留順序參數和結果。
  • 非常適合將相同的函數應用於多個資料點並以相同的順序取得結果清單。

選擇正確的方法

以下情況使用Pool.apply:

    您不希望處理非同步處理。

如果滿足以下條件,請使用Pool.apply_async:

    您想要非同步調用多個函數並稍後檢索它們的結果。
  • 您想要使用回呼來處理結果。

使用 Pool.map 如果:

<code class="python">import multiprocessing as mp
import time

def foo_pool(x):
    time.sleep(2)
    return x*x

result_list = []
def log_result(result):
    result_list.append(result)

def apply_async_with_callback():
    pool = mp.Pool()
    for i in range(10):
        pool.apply_async(foo_pool, args = (i, ), callback = log_result)
    pool.close()
    pool.join()
    print(result_list)

if __name__ == '__main__':
    apply_async_with_callback()</code>
您需要應用相同的同時對多個參數執行函數。

您想要保留參數結果順序。
[1, 0, 4, 9, 25, 16, 49, 36, 81, 64]

範例:Pool.apply_async 中的非同步回呼輸出:請注意,結果的順序順序可能與函數呼叫的順序不一致,與Pool.map 不同。

以上是在 Python 多處理中我應該使用哪一種池方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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