Asyncio中Lock部分的翻译

Locks

class asyncio.Lock(*, loop=None)

原始锁的对象。

这个基础的锁是一个同步化的组件,当它上锁的时候就不属于典型的协程了(译者住:我的理解是因为上锁会阻塞住运行,所以协程也得停下来)。这个锁有两个状态,lockedunlocked

新创建的锁的初始状态是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部分的翻译的更多相关文章

  1. 05 oracle中lock和latch的用途

    oracle中lock和latch的用途   本文向各位阐述Oracle的Latch机制,Latch,用金山词霸翻译是门插栓,闭锁,专业术语叫锁存器,我开始接触时就不大明白为什么不写Lock,不都是锁 ...

  2. c#初学-多线程中lock用法的经典实例

    本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被 ...

  3. 第九篇:在SOUI中使用多语言翻译

    为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可 ...

  4. 多线程中lock用法的经典实例

    多线程中lock用法的经典实例 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一 ...

  5. MySQL中lock tables和unlock tables浅析

    MySQL中lock tables和unlock tables浅析   在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Se ...

  6. C#中lock死锁实例教程

    这篇文章主要介绍了C#中lock死锁的用法,对于共享资源的访问及C#程序设计的安全性而言,有着非常重要的意义!需要的朋友可以参考下 链接:http://www.jb51.net/article/543 ...

  7. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  8. 一个线程中lock用法的经典实例

    /* 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 作者:http://h ...

  9. 从零开始学asyncio(中)

    本篇文章主要是讲解asyncio模块的实现原理. 这个系列还有另外两篇文章: 从零开始学asyncio(上) 从零开始学asyncio(下) 一. asyncio模块简介 asyncio是python ...

随机推荐

  1. bzoj千题计划253:bzoj2154: Crash的数字表格

    http://www.lydsy.com/JudgeOnline/problem.php?id=2154 #include<cstdio> #include<algorithm> ...

  2. 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(一) RTMP 命令详解

    源码地址:https://github.com/Tinywan/PHP_Experience 说明: rtmp的延迟主要取决于播放器设置,但流式传输软件,流的比特率和网络速度(以及响应时间“ping” ...

  3. 【整理】HTML5游戏开发学习笔记(2)- 弹跳球

    1.预备知识(1)在画布上绘制外部图片资源(2)梯度(gradient):HTML5中的对象类型,包括线性梯度和径向梯度.如createLinearGradient,绘制梯度需要颜色组http://w ...

  4. JavaScript绝句的小研究

    前几日在网上看到一篇文章:JavaScript绝句,看了以后觉得里面的代码颇为有趣,不过文章里面只是简单的说了这样写的目的和结果,却没有令读者起到既知其然,又知其所以然的效果.这里简单写一篇小文章剖析 ...

  5. iOS中UITableView和UICollectionView的默认空态页

    项目中想实现空态页风格统一控制的效果,就封装了一个默认空态页,使用的技术点有:1 方法替换 ,2 给分类(Category)添加属性. 我们知道,扩展(extension)可以给类添加私有变量和方法. ...

  6. Android改进版CoverFlow效果控件

    最近研究了一下如何在Android上实现CoverFlow效果的控件,其实早在2010年,就有Neil Davies开发并开源出了这个控件,Neil大神的这篇博客地址http://www.inter- ...

  7. Zookeeper笔记之基于zk的分布式配置中心

    一.场景 & 需求 集群上有很多个节点运行同一个任务,这个任务会有一些可能经常改变的配置参数,要求是当配置参数改变之后能够很快地同步到每个节点上,如果将这些配置参数放在本地文件中则每次都要修改 ...

  8. linux怎么执行jar文件 怎么打可执行的jar包

    Linux下执行jar文件方法:命令行下进入文件目录,执行java -jar file.jar即可,也可在桌面创建一个启动器,在命令栏填写相关的命令:java -jar /file路径/file.ja ...

  9. Linux下可以使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

  10. arm GIC介绍之四【转】

    转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...