Python標準庫為我們提供了threading和multiprocessing模組編寫相應的非同步多執行緒/多程式程式碼
從Python3.2開始,標準庫為我們提供了concurrent.futures
模組,它提供了ThreadPoolExecutor
和ProcessPoolExecutor
兩個類ThreadPoolExecutor和ProcessPoolExecutor繼承了Executor,分別被用來建立執行緒池和程式池的程式碼。實現了對threading
和multiprocessing
的更高階的抽象
concurrent.futures基礎模組是executor和future。
一、關於concurrent.futures模組
concurrent.futures模組的基礎是Exectuor,Executor是一個抽象類,它不能被直接使用。但是它提供的兩個子類ThreadPoolExecutor和ProcessPoolExecutor卻是非常有用,顧名思義兩者分別被用來建立執行緒池和程式池的程式碼。我們可以將相應的tasks直接放入執行緒池/程式池,不需要維護Queue來操心死鎖的問題,執行緒池/程式池會自動幫我們排程。
Future這個概念相信有java和nodejs下程式設計經驗的朋友肯定不陌生了,你可以把它理解為一個在未來完成的操作,這是非同步程式設計的基礎,傳統程式設計模式下比如我們操作queue.get的時候,在等待返回結果之前會產生阻塞,cpu不能讓出來做其他事情,而Future的引入幫助我們在等待的這段時間可以完成其他的操作。
Executor中定義了submit()
方法,這個方法的作用是提交一個可執行的回撥task
,並返回一個future例項。future物件代表的就是給定的呼叫。