python由於全局解釋器鎖GIL的存在導致對多線程的效率有不小影響,python爲了提高併發提供了兩個標準庫concurrent.futures和multiprocessing,兩者使用方式非常相似,都提拱了線程池和進程池操作。說到線程和進程,就不得不提下協程。我理解的是協程和多線程屬於併發操作,而多進程則屬於並行操作。併發操作利用的是cpu進行任務的切換,同一時間還是隻有一個任務在執行,而協程和多線程的區別在於,線程之間的切換成本要不協程高很多,所以協程的併發能力更強。併發和並行並不衝突,比如我所負責的項目就是多線程開發和協程開發,多進程方式部署方式實現的。multiprocessing早於concurrent.futures出現,但是兩者的性能基本一樣。下面介紹下concurrent.futures的使用方法。
1.線程池
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=10) as executor:
future = executor.submit(function, param)
result = future.result(timeout=1)
2.進程池
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(max_workers=10) as executor:
future = executor.submit(function, param)
result = future.result(timeout=1)