写点什么

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:079247

评论

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

架构师课作业 - 第四周

Tulane

系统架构知识是架构师的常识而不是能力(第 4 周学习总结)

李德政

极客大学架构师训练营

架构师训练营第四周课后总结

Cloud.

第四周 - 学习总结

molly

极客大学架构师训练营

互联网系统架构总结

紫极

架构师训练营第 4 周作业

Season

极客大学架构师训练营

大型互联网应用的发展和未来

拈香(曾德政)

互联网 极客大学架构师训练营 互联网架构 互联网架构的演进

架构师训练营第四周作业和小记

tuuezzy

架构师 极客大学架构师训练营

架构师训练营-作业4

紫极

架构师第四课总结

Dennis

大型互联网应用系统所使用的技术方案

olderwei

极客大学架构师训练营

系统架构

olderwei

极客大学架构师训练营

架构师训练营Week04homework

Nick

极客大学架构师训练营

一周风云之互联网构架演进

Dawn

架构师训练营week04 summary

Nick

极客大学架构师训练营

大规模复杂系统如何架构(二)?

李小匪

架构 架构师

面向对象学习

一叶知秋

架构模式和重构

GalaxyCreater

架构

Week 04 作业

鱼_XueTr

架构

04周作业——互联网系统架构

dao

极客大学架构师训练营 作业

week4 命题作业

小叶

极客大学架构师训练营

大规模复杂系统如何架构(一)?

李小匪

架构 极客大学架构师训练营

架构师训练营第四周总结

allen

第四周总结

Dark

第四周作业 - 命题作业

molly

极客大学架构师训练营

深入解析典型的大型互联网应用系统

拈香(曾德政)

互联网 架构师 极客大学架构师训练营 互联网架构 互联网应用技术方案

互联网架构演进的学习思考

架构5班杨娟Jessie

极客大学架构师训练营

架构师训练营第四周

跨域刀

极客大学架构师训练营

架构师训练营第四周总结

跨域刀

极客大学架构师训练营

架构师训练营 - 总结4

进击的炮灰

分布式系统架构学习总结(第四周)

吴建中

极客大学架构师训练营

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