ProcessPoolExecutor
ProcessPoolExecutor
import multiprocessing print(multiprocessing.cpu_count())
如果是cpu密集型 i線程池數量i就是cpu邏輯核數
如果是IO密集型, 最大線程數就是2倍的cpu邏輯核數
線程池中的線程數有兩個概念: 一個是核心池大小,一個是最大池大小
如果開啟的線程數量等於核心池大小了,就是進入隊列,當然隊列也有大小的,如果隊列也滿了,就會繼續開啟線程,如果開啟的線程數等於最大線程數了,那就考慮如何處理接下來的任務:是丟棄還是中止任務
with ProcessPoolExecutor(max_workers=200) as executor: # 這個是多進程
executor.map(print_hello, range(num))
但是聽聞Python的多線程實際上並不能真正利用多核,所以如果使用多線程實際上還是在一個核上做並發處理。不過,如果使用多進程就可以真正利用多核,因為各進程之間是相互獨立的,不共享資源,可以在不同的核上執行不同的進程,達到並行的效果