写点什么

Python 3.5 将支持 Async/Await 异步编程

  • 2015-05-22
  • 本文字数:826 字

    阅读完需:约 3 分钟

根据 Python 增强提案 (PEP) 第 0492 号, Python 3.5 将通过 async 和 await 语法增加对协程的支持。该提案目的是使协程成为 Python 语言的原生特性,并“建立一种普遍、易用的异步编程思维模型。”

这个新提议中声明一个协程的语法如下:

复制代码
async def read_data(db):
pass

async 是明确将函数声明为协程的关键字,即便没有使用 await 表达式。这样的函数执行时会返回一个协程对象。

在协程函数内部,可在某个表达式之前使用 await 关键字来暂停协程的执行,以等待某进程完成:

复制代码
async def read_data(db):
data = await db.fetch('SELECT ...')
...

由于增强版生成器的存在,Python 中其实早已有了协程的形式,例如当yield 或yield from 声明在Python 生成器内部出现,该生成器就会被当作协程。

以下示例展示基于生成器的协程的用法:

复制代码
>>> def createGenerator():
... mylist = range(3)
... for i in mylist:
... yield i*i
...
>>> mygenerator = createGenerator()
>>> for i in mygenerator:
... print(i)
0
1
4

以上代码中,每当生成器在 for 循环中被调用,该生成器中的 for 循环就会返回一个新的值。

关于 await 用法的更多示例请参见上文提到的 PEP #0492.

这个关于协程的新提案想明确地把生成器与协程区分开,这么做有如下好处:

  • 使这两个概念对新开发者来说更易于理解,因为它们二者的语法并不一样;
  • 能消除由于重构时不小心移除了协程中的 yield 声明而导致的“不明确错误”,这会导致协程变成普通的生成器。

async/await 语法能让程序员以序列方式编写代码,但编译器则会将其当作一系列的协程来处理,从而实现有效的并发。回到我们之前的例子,async/await 使我们可以顺序地编写多个 await 声明语句,就好像每个语句都会阻塞并等待结果,但实际上这并不会导致任何阻塞:

复制代码
async def read_data(db):
data = await db.fetch('SELECT ...')
if (data...)
await api.send(data ...')

查看英文原文 Python 3.5 will Support Async/Await Asynchronous Programming

2015-05-22 09:078868

评论

发布
暂无评论
发现更多内容

5分钟迁移关系型数据库到图数据库

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

MatrixOne:HTAP数据库中的OLAP设计

MatrixOrigin

云原生 超融合 HTAP MatrixOrigin MatrixOne

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

PingCAP

数据库 开源 TiDB pingCAP

2023牛客网最新版Java面试题及答案整理

架构师之道

Java 面试

关于直播间APP源码的开发,你了解多少?

山东布谷网络科技

1v1交友app开发

如何确定产品要做什么终端?

Bonaparte

产品 产品设计 产品终端

共话AIGC与企业数字化转型 PolarDB开源数据库技术沙龙南京站报名中!

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

软件测试 | MySQL创建或者修改视图

测吧(北京)科技有限公司

测试

低代码开发为什么能长盛不衰?

力软低代码开发平台

16款好用的白板笔记软件推荐,干货整理!

彭宏豪95

效率工具 软件推荐 科技 在线白板 Mac笔记软件

推荐 9 个很牛的项目管理软件

高端章鱼哥

项目管理 软件 企业管理软件

中原银行SQL治理实践

中原银行

SQL优化

java面试-数据库

程序员小张

大一统真的来了:多模态共享参数的 Meta-Transformer

Zilliz

meta Towhee 多模态大模型

自定义字体服务 - 基于Node的Web字体解决方案

疯狂紫萧

前端 nodejs 字体

更新合集 | 七月功能上新记

CODING DevOps

vhdns软件介绍与功能特性

新消费日报

如何实现高效的动态鉴权

KaiwuDB

KaiwuDB 动态鉴权

低代码平台技术分享官丨系统集成系列之领域建模

inBuilder低代码平台

Vulkan并非“灵药“

江湖修行

移动端 opengl Android; 渲染

软件测试 |BTREE索引与HASH索引

测吧(北京)科技有限公司

测试

PingCAP 陈煜琦:深耕中国市场,构建客户成功生态

PingCAP

MySQL 数据库 开源 TiDB pingCAP

前端视角的可观测性(一)

林十二XII

Linux内核编译很简单,六步编译一个自己的内核

树上有只程序猿

Linux 编译

软件测试 | 创建触发器

测吧(北京)科技有限公司

测试

Java 命令行参数解析方式探索(二):Apache Commons CLI

冰心的小屋

Java 命令行 console Apache Commons CLI

AntDB数据库与东方通TongWeb完成兼容互认,共筑数字化底座核心能力

亚信AntDB数据库

数据库 AntDB 企业号 7 月 PK 榜

微信安全基于 Flink 实时特征开发平台实践

Apache Flink

大数据 flink 实时计算

Python 3.5将支持Async/Await异步编程_Python_Sergio De Simone_InfoQ精选文章