首先須要瞭解的是threadpool 的用途,他更適合於用到一些大量的短任務合集,而非一些時間長的任務,換句話說,適合大量的CPU密集型短任務,那些消耗時間較長的IO密集型長任務適合用協程去解決。html
目前,python 標準庫(特指python2.X)中的threadpool模塊是在 multiprocessing.pool.threadpool,或者multiprocessing.dummy.ThreadPool(dummy模塊是針對threading 多線程的進一步封裝)。該模塊有個缺點就是在全部線程執行完以前沒法強制退出。實現原理大同小異:實例化pool的時候會建立指定數目的線程,把task 傳給一個task-queue,線程會讀取task-queue 的task,沒有就阻塞,讀取到後就執行,並將結果交給一個result-queue。python
除了標準庫中的threadpool,還有一些使用比較多的threadpool,如下展開。git
pip 中的 ThreadPool
安裝簡單:pip install threadpool
使用以下:github
1 |
pool = ThreadPool(poolsize) # 定義線程池,指定線程數量 |
原理相似,源碼解讀能夠參考python——有一種線程池叫作本身寫的線程池 ,該博客還給出了對其的一些優化。多線程
本身定製 threadpool
根據須要的功能定製適合本身的threadpool 也是一種常見的手段,經常使用的功能好比:是否須要返回線程執行後的返回值,線程執行完以後銷燬仍是阻塞等等。如下爲本身常常用的的一個比較簡潔的threadpool,感謝@kaito-kidd提供,源碼:函數
1 |
# coding: utf8
|
閱讀原文post