在python里協(xié)程使用同步鎖Lock的實(shí)例
盡管asyncio庫是使用單線程來實(shí)現(xiàn)協(xié)程的,但是它還是并發(fā)的,亂序執(zhí)行的??梢哉f是單線程的調(diào)度系統(tǒng),并且由于執(zhí)行時(shí)有延時(shí)或者I/O中斷等因素,每個(gè)協(xié)程如果同步時(shí),還是得使用一些同步對(duì)象來實(shí)現(xiàn)。
比如asyncio就定義了一個(gè)鎖對(duì)象Lock,它一次只允許一個(gè)協(xié)程來訪問共享的資源,如果多協(xié)程想訪問就會(huì)阻塞起來,也就是說如果一個(gè)協(xié)程沒有釋放這個(gè)鎖,別的協(xié)程是沒有辦法訪問共享的資源。
例子:
import asyncio import functools def unlock(lock): print('callback releasing lock') lock.release() async def coro1(lock): print('coro1 waiting for the lock') with await lock: print('coro1 acquired lock') print('coro1 released lock') async def coro2(lock): print('coro2 waiting for the lock') await lock try: print('coro2 acquired lock') finally: print('coro2 released lock') lock.release() async def main(loop): # Create and acquire a shared lock. lock = asyncio.Lock() print('acquiring the lock before starting coroutines') await lock.acquire() print('lock acquired: {}'.format(lock.locked())) # Schedule a callback to unlock the lock. loop.call_later(0.1, functools.partial(unlock, lock)) # Run the coroutines that want to use the lock. print('waiting for coroutines') await asyncio.wait([coro1(lock), coro2(lock)]), event_loop = asyncio.get_event_loop() try: event_loop.run_until_complete(main(event_loop)) finally: event_loop.close()
輸出結(jié)果如下:
acquiring the lock before starting coroutines lock acquired: True waiting for coroutines coro1 waiting for the lock coro2 waiting for the lock callback releasing lock coro1 acquired lock coro1 released lock coro2 acquired lock coro2 released lock
以上這篇在python里協(xié)程使用同步鎖Lock的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python datetime 如何處理時(shí)區(qū)信息
這篇文章主要介紹了Python datetime 如何處理時(shí)區(qū)信息,幫助大家更好的用python 處理時(shí)間,感興趣的朋友可以了解下。2020-09-09python判斷鏈表是否有環(huán)的實(shí)例代碼
在本篇文章里小編給大家整理的是關(guān)于python判斷鏈表是否有環(huán)的知識(shí)點(diǎn)及實(shí)例代碼,需要的朋友們參考下。2020-01-01python通過文本在一個(gè)圖中畫多條線的實(shí)例
今天小編就為大家分享一篇python通過文本在一個(gè)圖中畫多條線的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python內(nèi)置數(shù)據(jù)類型中的集合詳解
這篇文章主要為大家詳細(xì)介紹了Python內(nèi)置數(shù)據(jù)類型中的集合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(六):Web客戶端訪問
這篇文章主要介紹了python網(wǎng)絡(luò)編程之Web客戶端訪問 ,需要的朋友可以參考下2014-06-06Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法示例
這篇文章主要介紹了Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法,結(jié)合具體實(shí)例分析了Python中通過cx_Oracle調(diào)用PL/SQL的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Python實(shí)現(xiàn)冒泡排序算法的示例解析
冒泡排序(Bubble Sort)是一種簡單的排序算法。本文將詳細(xì)為大家講講Python實(shí)現(xiàn)冒泡排序算法的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06