Asyncio中Lock部分的翻译
Asyncio中Lock部分的翻译
Locks
class asyncio.Lock(*, loop=None)
原始锁的对象。
这个基础的锁是一个同步化的组件,当它上锁的时候就不属于典型的协程了(译者住:我的理解是因为上锁会阻塞住运行,所以协程也得停下来)。这个锁有两个状态,locked
和unlocked
。
新创建的锁的初始状态是unlocked
。锁有两个基本方法,acquire()
和release()
。当锁的状态是unlocked()
的时候,acquire()
就会改变锁状态,也就是上锁,然后会立刻返回。当锁的状态是locked
的时候,如果这个时候调用acquire()
,acquire()
会阻塞着,一直等到其他协程调用release()
来释放锁,然后再立刻上锁,接着返回。release()
方法只应该在锁是locked()
的时候调用,它会释放锁并立刻返回,如果对unlocked
状态的锁调用其release()
方法,会抛出RuntimeError
异常。
当有多个协程的acquire()
都在等待释放锁的时候,那么在释放锁的时候,也只会有一个协程会成功拿到锁,而且是第一个调用acquire()
的协程会被执行(译者注:也就是FIFO罗)。
acquire()
是一个协程操作,所以必须用yield from
(译者注:现在是await
了)。
Locks也支持上下文管理机制,yield from lock
应该作为上下文管理中的表达方式。
这个LOCK类不是线程安全的。
举个栗子
lock = Lock()
...
yield from lock
try:
...
finally:
lock.release()
举个上下文管理的栗子:
lock = Lock()
with (yield from lock):
...
锁对象的状态能够用来进行判断:
if not lock.locked():
yield from lock
else:
# lock is acquired
...
locked()
当锁被拿到的时候,返回True
(译者注:其实就是锁是上锁状态的时候返回真)。
acquire()
拿锁,申请锁,要去拿锁。
这个方法会阻塞到锁被释放,然后又把锁上锁,并返回真。
这个方法是协程,要记得用await
。
release()
释放锁,开锁。
当锁是上锁状态时,会释放锁,然后返回。如果其他的协程都在等待锁被释放,那么只会选择它们其中一个来获得锁(就是最早申请锁的那个)。
当没上锁的锁调用这个方法的时候,会抛出RuntimeError
异常。
这个方法没有返回值。
Asyncio中Lock部分的翻译的更多相关文章
- 05 oracle中lock和latch的用途
oracle中lock和latch的用途 本文向各位阐述Oracle的Latch机制,Latch,用金山词霸翻译是门插栓,闭锁,专业术语叫锁存器,我开始接触时就不大明白为什么不写Lock,不都是锁 ...
- c#初学-多线程中lock用法的经典实例
本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被 ...
- 第九篇:在SOUI中使用多语言翻译
为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可 ...
- 多线程中lock用法的经典实例
多线程中lock用法的经典实例 一.Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一 ...
- MySQL中lock tables和unlock tables浅析
MySQL中lock tables和unlock tables浅析 在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Se ...
- C#中lock死锁实例教程
这篇文章主要介绍了C#中lock死锁的用法,对于共享资源的访问及C#程序设计的安全性而言,有着非常重要的意义!需要的朋友可以参考下 链接:http://www.jb51.net/article/543 ...
- c#多线程中Lock()关键字的用法小结
本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...
- 一个线程中lock用法的经典实例
/* 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 作者:http://h ...
- 从零开始学asyncio(中)
本篇文章主要是讲解asyncio模块的实现原理. 这个系列还有另外两篇文章: 从零开始学asyncio(上) 从零开始学asyncio(下) 一. asyncio模块简介 asyncio是python ...
随机推荐
- linux服务器安装mysql并配置外网访问
linux服务器安装mysql并配置外网访问 更新系统,如果不运行该命令,直接安装mysql,会出现"有几个软件包无法下载 sudo apt-get update 安装mysql sudo ...
- Linux通过ssh登录其他服务器,不用输入密码
有A(192.168.10.163)和B(192.168.10.164)两台服务器,为了使A服务器通过SSH连接B服务器时,免密登录,做以下操作. 1. 登录A(192.168.10.163)服务器( ...
- 20155218 2006-2007-2 《Java程序设计》第5周学习总结
20155218 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 java中的错误都会被包装成对象,且是可抛出的. 通常称错误处理为异常处理,程序设计本身的错 ...
- django错误笔记——1242 Subquery returns more than 1 row
在数据库查询操作过程中,子查询结果不唯一,导致外面的查询无法进行. 我的错误语句: rid = models.User.objects.filter(username=username).values ...
- tensorflow随机张量创建
TensorFlow 有几个操作用来创建不同分布的随机张量.注意随机操作是有状态的,并在每次评估时创建新的随机值. 下面是一些相关的函数的介绍: tf.random_normal 从正态分布中输出随机 ...
- python3转变exe的方法
python开发的代码可能在其他windows上并不能使用用,除非别人的环境中也有python. 下面是如何将python开发的东西转为exe格式 1.安装pyinstaller pip instal ...
- 高可用的并行MySQL数据同步及分布式
首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master ...
- NEERC Southern Subregional 2011
NEERC Southern Subregional 2011 A - Bonnie and Clyde solution 双指针搞搞就好. 时间复杂度:\(O(n)\) B - Building F ...
- 五、vue状态管理模式vuex
一.vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 即data中属性同时有一 ...
- ScheduledThreadExecutor定时任务线程池
ScheduledThreadPoolExecutor 继承自ThreadPoolExecutor实现了ScheduledExecutorService接口.主要完成定时或者周期的执行线程任务. 代码 ...