python程序锁教程(在python里协程使用同步锁Lock的实例)
类别:脚本大全 浏览量:2107
时间:2022-01-27 01:50:38 python程序锁教程
在python里协程使用同步锁Lock的实例尽管asyncio库是使用单线程来实现协程的,但是它还是并发的,乱序执行的。可以说是单线程的调度系统,并且由于执行时有延时或者I/O中断等因素,每个协程如果同步时,还是得使用一些同步对象来实现。
比如asyncio就定义了一个锁对象Lock,它一次只允许一个协程来访问共享的资源,如果多协程想访问就会阻塞起来,也就是说如果一个协程没有释放这个锁,别的协程是没有办法访问共享的资源。
例子:
|
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() |
输出结果如下:
|
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里协程使用同步锁Lock的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/caimouse/article/details/77912534
您可能感兴趣
- python 基于内容的推荐系统(不到40行代码用Python实现一个简单的推荐系统)
- pythonjson格式化原理(详解pythonstr与json类型转换)
- python开启多线程(python 多线程重启方法)
- python如何获取列表值(Python中按键来获取指定的值)
- python中的insert(python assert的用处示例详解)
- python如何一行行读取文件(python 实现一次性在文件中写入多行的方法)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- 卷积神经网络python实现(Python通过TensorFlow卷积神经网络实现猫狗识别)
- python队列快速排序(python按照多个条件排序的方法)
- python的静态方法和类方法(深入解析python中的实例方法、类方法和静态方法)
- python中什么是迭代器(一篇文章彻底搞懂Python中可迭代Iterable、迭代器Iterator与生成器Generator的概)
- pycharm怎么创建django项目(Python、 Pycharm、Django安装详细教程图文)
- python集合类(Python数据类型之Set集合实例详解)
- python核心编程内容(顶级大神Linux,Python,Go,PHP之父谁是夜猫子?用Python揭秘!)
- python 制作图片文字识别(如何使用Python进行OCR识别图片中的文字)
- 零基础学计算机二级python(计算机二级python学习教程1 教大家如何学习python)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
热门推荐
- css43个基本技巧(必须掌握10个非常不错的CSS技巧)
- python3爬虫代码(Python3爬楼梯算法示例)
- python把str转成list(python3 字符串/列表/元组str/list/tuple相互转换方法及join函数的使用)
- 微信小程序企业微信打卡(使用Python实现企业微信的自动打卡功能)
- react执行流程(React开启代理的2种实用方式)
- iis为什么找不到文件(iis 不能下载包含中文文件名的rar文件)
- axios实现原理(项目中Axios二次封装实例Demo)
- 怎么用python获取目录(python 获得任意路径下的文件及其根目录的方法)
- dedecms数据库优化(dedecms友情链接flink增加下拉菜单的方法)
- a标签的href与onclick
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9