根据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/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

Python 3.5将支持Async/Await异步编程相关推荐

  1. @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?

    布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!​zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...

  2. 同步方法 调用异步防范_.NET Web应用中为什么要使用async/await异步编程?

    布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!​zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...

  3. Async await 异步编程说明

    希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task  和 await ...

  4. C# async/await异步编程深入理解

    异步函数简介 一般指 async 修饰符声明得.可包含await表达式得方法或匿名函数. 声明方式 异步方法的声明语法与其他方法完全一样, 只是需要包含 async 关键字.async可以出现在返回值 ...

  5. Async和Await异步编程的原理

    1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...

  6. async And await异步编程活用基础

    async And await异步编程活用基础 原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 awai ...

  7. WCF透明代理类,动态调用,支持async/await

    我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...

  8. 【Rust日报】 2019-08-12:Tokio alpha 版发布,新版本支持async/await

    Tokio alpha 版发布 #tokio 新版本支持async/await tokio = "=0.2.0-alpha.1" #![feature(async_await)]u ...

  9. 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中的异步特性怎么办呢?还好有一个开源的类 ...

最新文章

  1. 二、LDAP服务端搭建及客户端测试【完】
  2. python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)
  3. sublime中利用正则批量修改数据
  4. Apache Superset从入门到放弃(基于python3.6.9)
  5. 不显示参数名_Houdini自定义参数Folder的几种模式
  6. Django Views(视图函数)
  7. Sudoku Extension UVALive - 4763
  8. mysql 密码修改时间_Mysql修改密码的方法
  9. 用android制作一个记事本app_用扁平化呈现一个天气APP
  10. dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总
  11. Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决
  12. 1:500城镇地形图测绘已正式启动
  13. Java实现DOC文件转DOCX文件
  14. 软件随想录(local.joelonsoftware.com/wiki)-2001年04月21日 别让架构太空人吓到你 - Don't Let Architecture Astronauts Scar
  15. Android 内部存储和外部存储
  16. PLC实训3:计数器控制电机循环启停
  17. 图像处理-最常见面试题(必问)
  18. final修饰的变量必须初始化吗?
  19. tomcat启动找不到jer报错
  20. Panda3D绘制立方体

热门文章

  1. 通过 SpringBoot 中使用 lombok 实现自动创建JavaBean的get/set方法、全参/无参构造方法、toString()、equals()、hashCode()
  2. Python文件的读写操作
  3. 2020-12-08 tensorflow model.fit_generator()函数参数
  4. java二维数奇数组金字塔_金字塔内发现一组神奇数字 至今无解(图)
  5. C语言实验——打印金字塔_JAVA
  6. MyBatis-Plus 代码生成器
  7. 11.MapReduce第1部分
  8. max7219驱动共阳点阵
  9. 三年程序员之后的思考
  10. 【c++】22. STL容器的底层实现详解