使用concurrent.futures模組併發,實現程式池、執行緒池

阿里瓜瓜發表於2019-01-03

Python標準庫為我們提供了threading和multiprocessing模組編寫相應的非同步多執行緒/多程式程式碼

從Python3.2開始,標準庫為我們提供了concurrent.futures模組,它提供了ThreadPoolExecutorProcessPoolExecutor兩個類ThreadPoolExecutor和ProcessPoolExecutor繼承了Executor,分別被用來建立執行緒池和程式池的程式碼。實現了對threadingmultiprocessing的更高階的抽象

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物件代表的就是給定的呼叫。 

 

二、submit()方法實現程式池/執行緒池

相關文章