写点什么

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

评论

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

【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)

码界西柚

redis 数据结构 字典 redis 底层原理 数据库 nosql

【连载 22】性能测试实践——超时结账第二回合

FunTester

记录一下 简单udp和sni 代理 done

八苦-瞿昙

C# Proxy

【每日学点HarmonyOS Next知识】页面引用问题、Json三方库、路由表使用、下拉刷新问题、视频播放错误

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】类型判断、刘海高度、隐私弹窗、滑动下一页效果、清楚缓存

轻口味

HarmonyOS HarmonyOS NEXT

音乐NFT系统的测试

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

【每日学点HarmonyOS Next知识】自定义对象传参、页面生命周期、自定义弹窗、路由打开对话框,网络图片

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】抽屉效果、树状组件、离屏渲染、上下文获取、Tab声明周期

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】嵌套组件、装饰器报错、迭代列表刷新、单位换算、tabs组件生命周期

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】防截屏、加载不同View、函数传参、加载中效果、沉浸式底部状态栏

轻口味

HarmonyOS HarmonyOS NEXT

资产管理系统建设解决方案,项目实施运维方案

金陵老街

资产管理 系统方案

【每日学点HarmonyOS Next知识】路由栈问题、图片圆角、颜色资源转十六进制字符串、数据集变化崩溃、组件声明周期

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】上下拉动作、图片预览、组件边距、this获取、svg旋转

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】点赞动画实现、Grid当前显示条目、刷新组件、代码规范、状态变量

轻口味

HarmonyOS HarmonyOS NEXT

《Operating System Concepts》阅读笔记:p309-p330

codists

操作系统

音乐NFT系统的协议

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

音乐NFT系统的运维

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

SvelteKit 最新中文文档教程(3)—— 数据加载

冴羽

JavaScript 前端开发 前端框架 Svelte SvelteKit

【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段

轻口味

HarmonyOS HarmonyOS NEXT

懒猫微服助我生活工作穿梭无忧

玄兴梦影

NAS 远程访问 懒猫微服 微型服务器 私有云助手

音乐NFT软件系统的开发

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

【第 8 期】搜索客 Meetup - Elasticsearch 的一些“双刃剑”特性

极限实验室

Meetup Elastic Search 搜索客社区

【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】字符串、图片生成二维码,文本行数获取及输入框退出编辑状态方法汇总

轻口味

HarmonyOS HarmonyOS NEXT

音乐NFT系统的网络安全

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

【每日学点HarmonyOS Next知识】路由返回、滚动到中间、worker取消任务、文本选择多级联动

轻口味

HarmonyOS HarmonyOS NEXT

新手学吉他如何掌握音阶?有哪些软件可以帮助我们练习音阶?

阿拉灯神丁

吉他学习 吉他谱 Guitar Pro8 音乐管理和分析软件

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