Python 執行緒池
Fumbani Banda
2023年1月30日
- 執行緒池定義
-
multiprocessing.pool.ThreadPool
和multiprocessing.Pool
之間的差異 -
Python 中的
multiprocessing.Pool
-
Python 中的
multiprocessing.pool.Threadpool
本教程將展示 multiprocessing
中的 Pool
和 multiprocessing.pool
中的 ThreadPool
之間的區別
執行緒池定義
執行緒池是一組預先例項化的空閒執行緒,準備好接受工作。為每個要非同步執行的任務建立一個新的執行緒物件是很昂貴的。使用執行緒池,你可以將任務新增到任務佇列,執行緒池為任務分配一個可用執行緒。執行緒池有助於避免建立或銷燬不必要的執行緒。
multiprocessing.pool.ThreadPool
和 multiprocessing.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