python中rim的用法_Python并发开发简介
Python的并發(fā)程序可以使用multiprocessing庫、threading庫、asyncio庫、concurrent.futures庫以及selectors庫等等協(xié)助編寫:
multiprocessing庫可以創(chuàng)建多個(gè)進(jìn)程,由系統(tǒng)協(xié)調(diào)調(diào)度各個(gè)任務(wù);
threading庫則是創(chuàng)建多個(gè)線程,由Python解釋器在一條進(jìn)程內(nèi)并發(fā)執(zhí)行任務(wù),始終只占用一個(gè)CPU核心資源,會(huì)遇到臭名昭著的GIL問題;
asyncio庫則是將任務(wù)中的IO密集部分單拎出來,系統(tǒng)可以在等待IO密集部分返回的同時(shí)多次執(zhí)行計(jì)算密集代碼,所有任務(wù)都在一條線程內(nèi)執(zhí)行;
concurrent.futures庫可以用來創(chuàng)建線程池或進(jìn)程池,更適合編寫粒度較細(xì)的并發(fā)任務(wù)代碼。
selectors庫是對(duì)select庫的高級(jí)封裝;而后者則是對(duì)Unix的select、poll、Linux的epoll、BSD的Kqueue等等IO復(fù)用方法的低級(jí)封裝庫。
multiprocessing庫、threading庫、asyncio庫的有著類似的同步條件:Lock、RLock、Condition、Semaphore、Barrier、Event等:
Lock、RLock較為類似,可以用來將一組操作原子化。RLock的特殊之處在于,可以被同一條線程遞歸調(diào)用,當(dāng)然用完之后也得遞歸解鎖。
Condition可以保證多組線程阻塞在同一位置,等候其他線程的通知,防止因?yàn)橘Y源為空時(shí)發(fā)生錯(cuò)誤。
Semaphore用于確保不會(huì)有過多線程同時(shí)訪問某一資源。
Barrier則用于保證所有線程各自在某一位置阻塞,當(dāng)所有線程都阻塞時(shí),又各自開始執(zhí)行下一條指令。
Event較為簡(jiǎn)單,一條線程可能阻塞等候event對(duì)象被另一條線程設(shè)置為true。
線程的好處是有共享的內(nèi)存空間,方便線程間的交流。而進(jìn)程則需要特殊的機(jī)制。multiprocessing庫提供了queue和pipe兩種機(jī)制用于進(jìn)程間交流。這兩類的不同之處在于:queue的內(nèi)容可以被所有進(jìn)程訪問到,pipe只能被兩個(gè)進(jìn)程訪問到,信息的安全程度較高。multiprocessing庫還可以使用Manager對(duì)象為各個(gè)進(jìn)程提供共享內(nèi)存空間。
此外,Python為線程提供了queue.Queue和collections.deque滿足線程的交流需求。后者的入隊(duì)出隊(duì)操作都是線程安全的。
而asyncio庫有自己的queue類可以用于協(xié)程間的交流。
asyncio庫的使用方法與前兩者區(qū)別較大。當(dāng)調(diào)用async def定義協(xié)程函數(shù)時(shí),內(nèi)部使用await等候另一個(gè)協(xié)程函數(shù)返回。使用asyncio協(xié)程庫需要清晰的區(qū)分出IO密集操作和計(jì)算密集操作,也就是手動(dòng)調(diào)度并發(fā)任務(wù)。多線程庫則依靠解釋器自動(dòng)調(diào)度并發(fā)任務(wù)。asyncio庫使用方法較為復(fù)雜,更多內(nèi)容請(qǐng)看官方文檔——18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks?。
concurrent.futures庫可以使用with語句來并發(fā)執(zhí)行粒度較細(xì)的并發(fā)任務(wù),也可以使用submit()方法來單獨(dú)執(zhí)行一個(gè)函數(shù),返回一個(gè)future對(duì)象。future可以用于對(duì)對(duì)應(yīng)任務(wù)的撤銷、結(jié)果傳遞、回調(diào)函數(shù)設(shè)置、異常分析等等操作。
總結(jié)
以上是生活随笔為你收集整理的python中rim的用法_Python并发开发简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 董小飒带领公会豪取《泰亚史诗》3大领地
- 下一篇: 剑网3英雄冰火岛副本打法指南 英雄冰火岛