多處理中基於執行緒的池
多處理模組提供了一個強大的「Pool」類,用於使用單獨的進程並行化任務。然而,這種方法會因進程建立而產生開銷。對於在實際函數呼叫期間釋放 GIL 的 IO 綁定操作,使用執行緒可以獲得更好的效能。
引入 ThreadPool 類別
與普遍的看法相反,多處理模組確實提供了基於執行緒的池介面。這個隱藏的寶石可以透過 from multiprocessing.pool import ThreadPool 訪問,提供了一種使用線程並行化任務的便捷方法。
儘管其未記錄狀態,ThreadPool 類別使用包裝 python 的虛擬 Process 類別實作了多處理池介面執行緒。這個虛擬的 Process 類別駐留在 multiprocessing.dummy 模組中,該模組提供了基於線程的完整多處理介面。
範例用法
與ProcessPool 類似,ThreadPool 可以用於並行化映射函數:
import multiprocessing.pool def long_running_func(p): c_func_no_gil(p) p = multiprocessing.pool.ThreadPool(4) xs = p.map(long_running_func, range(100))
注意:
注意:注意:注意:注意:在所有情況下,ThreadPool 類別都不像ProcessPool那樣高效,特別是當任務需要大量 CPU 時間時。以上是我什麼時候應該使用 Python 未錄製的「ThreadPool」進行並行處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!