Python 3.5将支持Async/Await异步编程
根据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生成器内部出现,该生成器就会被当作协程。
\\
以下示例展示基于生成器的协程的用法:
\\
\u0026gt;\u0026gt;\u0026gt; def createGenerator():\... mylist = range(3)\... for i in mylist:\... yield i*i\...\\u0026gt;\u0026gt;\u0026gt; mygenerator = createGenerator()\\u0026gt;\u0026gt;\u0026gt; for i in mygenerator:\... print(i)\0\1\4
\\
以上代码中,每当生成器在for循环中被调用,该生成器中的for循环就会返回一个新的值。
\\
关于await用法的更多示例请参见上文提到的PEP #0492.
\\
这个关于协程的新提案想明确地把生成器与协程区分开,这么做有如下好处:
\\
- 使这两个概念对新开发者来说更易于理解,因为它们二者的语法并不一样; \\
- 能消除由于重构时不小心移除了协程中的yield声明而导致的“不明确错误”,这会导致协程变成普通的生成器。 \
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
Python 3.5将支持Async/Await异步编程相关推荐
- @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- 同步方法 调用异步防范_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- Async await 异步编程说明
希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task 和 await ...
- C# async/await异步编程深入理解
异步函数简介 一般指 async 修饰符声明得.可包含await表达式得方法或匿名函数. 声明方式 异步方法的声明语法与其他方法完全一样, 只是需要包含 async 关键字.async可以出现在返回值 ...
- Async和Await异步编程的原理
1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...
- async And await异步编程活用基础
async And await异步编程活用基础 原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 awai ...
- WCF透明代理类,动态调用,支持async/await
我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...
- 【Rust日报】 2019-08-12:Tokio alpha 版发布,新版本支持async/await
Tokio alpha 版发布 #tokio 新版本支持async/await tokio = "=0.2.0-alpha.1" #![feature(async_await)]u ...
- Microsoft.Bcl.Async 使用总结--在.NET Framework 4.5项目上使用.NET Framework 4.5版本及以上版本才可以使用C# 5中的async/await异步特
正常情况下async/await异步特性,只能在.NET Framework 4.5以上的版本才可以使用,那如果想在.NET Framework 4使用C# 5中的异步特性怎么办呢?还好有一个开源的类 ...
最新文章
- 二、LDAP服务端搭建及客户端测试【完】
- python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)
- sublime中利用正则批量修改数据
- Apache Superset从入门到放弃(基于python3.6.9)
- 不显示参数名_Houdini自定义参数Folder的几种模式
- Django Views(视图函数)
- Sudoku Extension UVALive - 4763
- mysql 密码修改时间_Mysql修改密码的方法
- 用android制作一个记事本app_用扁平化呈现一个天气APP
- dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总
- Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决
- 1:500城镇地形图测绘已正式启动
- Java实现DOC文件转DOCX文件
- 软件随想录(local.joelonsoftware.com/wiki)-2001年04月21日 别让架构太空人吓到你 - Don't Let Architecture Astronauts Scar
- Android 内部存储和外部存储
- PLC实训3:计数器控制电机循环启停
- 图像处理-最常见面试题(必问)
- final修饰的变量必须初始化吗?
- tomcat启动找不到jer报错
- Panda3D绘制立方体
热门文章
- 通过 SpringBoot 中使用 lombok 实现自动创建JavaBean的get/set方法、全参/无参构造方法、toString()、equals()、hashCode()
- Python文件的读写操作
- 2020-12-08 tensorflow model.fit_generator()函数参数
- java二维数奇数组金字塔_金字塔内发现一组神奇数字 至今无解(图)
- C语言实验——打印金字塔_JAVA
- MyBatis-Plus 代码生成器
- 11.MapReduce第1部分
- max7219驱动共阳点阵
- 三年程序员之后的思考
- 【c++】22. STL容器的底层实现详解