python-concurrent.futures實現併發

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章