Python 執行緒池

Fumbani Banda 2023年1月30日 2021年12月4日
  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 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