Python 執行緒池

Fumbani Banda 2023年1月30日
  1. 執行緒池定義
  2. multiprocessing.pool.ThreadPoolmultiprocessing.Pool 之間的差異
  3. Python 中的 multiprocessing.Pool
  4. Python 中的 multiprocessing.pool.Threadpool
Python 執行緒池

本教程將展示 multiprocessing 中的 Poolmultiprocessing.pool 中的 ThreadPool 之間的區別

執行緒池定義

執行緒池是一組預先例項化的空閒執行緒,準備好接受工作。為每個要非同步執行的任務建立一個新的執行緒物件是很昂貴的。使用執行緒池,你可以將任務新增到任務佇列,執行緒池為任務分配一個可用執行緒。執行緒池有助於避免建立或銷燬不必要的執行緒。

multiprocessing.pool.ThreadPoolmultiprocessing.Pool 之間的差異

multiprocessing.pool.ThreadPool 的行為方式與 multiprocessing.Pool 相同。不同之處在於 multiprocessing.pool.Threadpool 使用執行緒來執行 worker 的邏輯,而 multiprocessing.Pool 使用工作程序。

Python 中的 multiprocessing.Pool

下面的程式碼將產生 4 個不同的程序,每個程序將執行函式 sleepy()

# python 3.x
from multiprocessing import Pool
import os
import time


def sleepy(x):
    print("Process Id", os.getpid())
    time.sleep(x)
    return x


if __name__ == "__main__":
    p = Pool(5)
    pool_output = p.map(sleepy, range(4))
    print(pool_output)

輸出:

Process Id 239
Process Id 240
Process Id 241
Process Id 242
[0, 1, 2, 3]

Python 中的 multiprocessing.pool.Threadpool

ThreadPool 將生成 4 個執行 sleepy() 函式而不是工作程序的執行緒。

# python 3.x
from multiprocessing.pool import ThreadPool
import os
import time


def sleepy(x):
    print("Process Id", os.getpid())
    time.sleep(x)
    return x


if __name__ == "__main__":
    p = ThreadPool(5)
    pool_output = p.map(sleepy, range(4))
    print(pool_output)

輸出:

Process Id 217
Process Id 217
Process Id 217
Process Id 217
[0, 1, 2, 3]
作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

相關文章 - Python Threading