国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在python里協(xié)程使用同步鎖Lock的實例

2020-02-16 01:14:07
字體:
供稿:網(wǎng)友

盡管asyncio庫是使用單線程來實現(xiàn)協(xié)程的,但是它還是并發(fā)的,亂序執(zhí)行的。可以說是單線程的調(diào)度系統(tǒng),并且由于執(zhí)行時有延時或者I/O中斷等因素,每個協(xié)程如果同步時,還是得使用一些同步對象來實現(xiàn)。

比如asyncio就定義了一個鎖對象Lock,它一次只允許一個協(xié)程來訪問共享的資源,如果多協(xié)程想訪問就會阻塞起來,也就是說如果一個協(xié)程沒有釋放這個鎖,別的協(xié)程是沒有辦法訪問共享的資源。

例子:

import asyncioimport 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 coroutineslock acquired: Truewaiting for coroutinescoro1 waiting for the lockcoro2 waiting for the lockcallback releasing lockcoro1 acquired lockcoro1 released lockcoro2 acquired lockcoro2 released lock

以上這篇在python里協(xié)程使用同步鎖Lock的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 交城县| 孟津县| 绵竹市| 邵武市| 喀喇沁旗| 东城区| 涟源市| 靖西县| 伽师县| 雅安市| 卢湾区| 寿宁县| 邳州市| 兴隆县| 行唐县| 略阳县| 万安县| 周宁县| 台湾省| 讷河市| 常熟市| 忻城县| 陇南市| 梅河口市| 健康| 新野县| 峨眉山市| 贺兰县| 兰坪| 延吉市| 阳西县| 霸州市| 白朗县| 灵川县| 桐柏县| 垣曲县| 连城县| 宁强县| 黎城县| 元江| 鲁甸县|