asyncio一个简单的锁示例

import asyncio
import time
import logging
logging.basicConfig( # 用日志打印输出信息
    level=logging.INFO,
    format="%(asctime)s %(process)d %(thread)d [*] %(message)s"
)



async def myWorker(lock,i):
    logging.info(f"试图获得锁定:{i}")
    async with  lock:
        logging.info(f"目前已锁定:{i}")
        await asyncio.sleep(3)
    logging.info(f"解锁临界区:{i}")

async def main():
    lock = asyncio.Lock()
    await asyncio.wait([myWorker(lock,1), myWorker(lock,2), myWorker(lock,3)])



if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(main())
        logging.info("所有任务完成")
    except KeyboardInterrupt as e:
        logging.info(asyncio.Task.all_tasks())
        logging.info(asyncio.gather(*asyncio.Task.all_tasks()).cancel())
        loop.stop()
        loop.run_forever()
    finally:
        loop.close() # 在jupyter不能手动关闭

输出:

2019-11-15 13:32:54,117 11552 12816 [*] 试图获得锁定:2
2019-11-15 13:32:54,117 11552 12816 [*] 目前已锁定:2
2019-11-15 13:32:54,117 11552 12816 [*] 试图获得锁定:1
2019-11-15 13:32:54,118 11552 12816 [*] 试图获得锁定:3
2019-11-15 13:32:57,119 11552 12816 [*] 解锁临界区:2
2019-11-15 13:32:57,119 11552 12816 [*] 目前已锁定:1
2019-11-15 13:33:00,120 11552 12816 [*] 解锁临界区:1
2019-11-15 13:33:00,120 11552 12816 [*] 目前已锁定:3
2019-11-15 13:33:03,120 11552 12816 [*] 解锁临界区:3
2019-11-15 13:33:03,120 11552 12816 [*] 所有任务完成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值