尽管asyncio库是使用单线程来实现协程的,但是它还是并发的,乱序执行的。可以说是单线程的调度系统,并且由于执行时有延时或者I/O中断等因素,每个协程如果同步时,还是得使用一些同步对象来实现。
比如asyncio就定义了一个锁对象锁,它一次只允许一个协程来访问共享的资源,如果多协程想访问就会阻塞起来,也就是说如果一个协程没有释放这个锁,别的协程是没有办法访问共享的资源。
<>强例子:强>
进口asyncio 进口functools def解锁(锁): print(回调释放锁) lock.release () 异步def coro1(锁): 打印(coro1等待锁的) 等待锁: print (coro1获得锁) print (coro1释放锁) 异步def coro2(锁): 打印(coro2等待锁的) 等待锁 试一试: print (coro2获得锁) 最后: print (coro2释放锁) lock.release () 异步def主要(循环): #创建并获取共享锁。 锁=asyncio.Lock () 打印(“获取锁之前协程”) 等待lock.acquire () 打印(“锁获得的:{}”.format (lock.locked ())) #安排调释放锁。 functools loop.call_later (0.1。部分(解锁,锁) #运行的协同程序要使用锁。 打印(“等待协同程序”) 等待asyncio.wait ([coro1(锁),coro2(锁)]), event_loop=asyncio.get_event_loop () 试一试: event_loop.run_until_complete(主(event_loop)) 最后: event_loop.close () >之前<强>输出结果如下:强>
获取锁之前开始协同程序 锁了:真 等待协同程序 coro1等待锁 coro2等待锁 回调释放锁 coro1获得锁 coro1释放锁 coro2获得锁 coro2释放锁以上这篇在python里协程使用同步锁锁的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
在python里协程使用同步锁锁的实例