日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中rim的用法_Python并发开发简介

發布時間:2023/12/13 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中rim的用法_Python并发开发简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的并發程序可以使用multiprocessing庫、threading庫、asyncio庫、concurrent.futures庫以及selectors庫等等協助編寫:

multiprocessing庫可以創建多個進程,由系統協調調度各個任務;

threading庫則是創建多個線程,由Python解釋器在一條進程內并發執行任務,始終只占用一個CPU核心資源,會遇到臭名昭著的GIL問題;

asyncio庫則是將任務中的IO密集部分單拎出來,系統可以在等待IO密集部分返回的同時多次執行計算密集代碼,所有任務都在一條線程內執行;

concurrent.futures庫可以用來創建線程池或進程池,更適合編寫粒度較細的并發任務代碼。

selectors庫是對select庫的高級封裝;而后者則是對Unix的select、poll、Linux的epoll、BSD的Kqueue等等IO復用方法的低級封裝庫。

multiprocessing庫、threading庫、asyncio庫的有著類似的同步條件:Lock、RLock、Condition、Semaphore、Barrier、Event等:

Lock、RLock較為類似,可以用來將一組操作原子化。RLock的特殊之處在于,可以被同一條線程遞歸調用,當然用完之后也得遞歸解鎖。

Condition可以保證多組線程阻塞在同一位置,等候其他線程的通知,防止因為資源為空時發生錯誤。

Semaphore用于確保不會有過多線程同時訪問某一資源。

Barrier則用于保證所有線程各自在某一位置阻塞,當所有線程都阻塞時,又各自開始執行下一條指令。

Event較為簡單,一條線程可能阻塞等候event對象被另一條線程設置為true。

線程的好處是有共享的內存空間,方便線程間的交流。而進程則需要特殊的機制。multiprocessing庫提供了queue和pipe兩種機制用于進程間交流。這兩類的不同之處在于:queue的內容可以被所有進程訪問到,pipe只能被兩個進程訪問到,信息的安全程度較高。multiprocessing庫還可以使用Manager對象為各個進程提供共享內存空間。

此外,Python為線程提供了queue.Queue和collections.deque滿足線程的交流需求。后者的入隊出隊操作都是線程安全的。

而asyncio庫有自己的queue類可以用于協程間的交流。

asyncio庫的使用方法與前兩者區別較大。當調用async def定義協程函數時,內部使用await等候另一個協程函數返回。使用asyncio協程庫需要清晰的區分出IO密集操作和計算密集操作,也就是手動調度并發任務。多線程庫則依靠解釋器自動調度并發任務。asyncio庫使用方法較為復雜,更多內容請看官方文檔——18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks?。

concurrent.futures庫可以使用with語句來并發執行粒度較細的并發任務,也可以使用submit()方法來單獨執行一個函數,返回一個future對象。future可以用于對對應任務的撤銷、結果傳遞、回調函數設置、異常分析等等操作。

總結

以上是生活随笔為你收集整理的python中rim的用法_Python并发开发简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。