【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

评论

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

spring教程,java程序设计基础教程,OMG

Java 程序员 后端

spring教程,spring框架菜鸟教程,Java重点知识点

Java 程序员 后端

Spring是怎样巧用三级缓存解决循环依赖的,nginx实战百度网盘,面试必问!

Java 程序员 后端

netty框架教程,mysql数据库教程视频指导版,HTTPS面试常问全解析

Java 程序员 后端

oppoJava面试题,开课吧高级架构师10期咋样,正式加入字节跳动

Java 程序员 后端

springcloud百度网盘,牛客网面试题,Java面试高频知识点

Java 程序员 后端

springmvc原理图解,尚硅谷ajax源码,Redis宕机数据丢失解决方案

Java 程序员 后端

Spring容器如何解决循环依赖的原理,Java编程教学视频

Java 程序员 后端

spring源码视频教程,java尚学堂,Java项目视频

Java 程序员 后端

tomcat面试题,传智播客java就业班视频教程,Spring的XML解析原理

Java 程序员 后端

rocketmq原理解析,尚硅谷深圳校区,万分膜拜!

Java 程序员 后端

tomcat服务器面试题,java项目开发实训教程,Java编程教程视频下载

Java 程序员 后端

springcloud入门,动力节点与尚学堂,月薪30K

Java 程序员 后端

RocketMQ生产部署架构设计,Java面试超详细知识点

Java 程序员 后端

springboot思维导图,尚学堂java300集,从头到尾,都是精华

Java 程序员 后端

springboot教学视频,mysql破解版百度云,微盟Java笔试题

Java 程序员 后端

springcloud教程入门,极客时间kafka,4年小Java的心路历程

Java 程序员 后端

netty源码剖析与实战百度云,牛客网搜题软件,字节跳动高级Java开发面试

Java 程序员 后端

RPC的通信Netty的底层是Nio,在一家公司干多长时间跳槽才合适

Java 程序员 后端

springboot实战项目源码,java算法视频百度云盘,阿里P8亲自讲解

Java 程序员 后端

tomcat面试题汇总,java设计模式菜鸟教程,linux内核教程

Java 程序员 后端

RocketMQ避坑指南,java入门教程全套,实战篇

Java 程序员 后端

spring全方位深入探索,2021Java开发社招面试解答之性能优化

Java 程序员 后端

spring教程下载,linux入门基础教程,2021Java者未来的出路在哪里

Java 程序员 后端

spring教程,java大学实用教程第四版作业题,中高级Java开发面试题

Java 程序员 后端

“金三银四”春招指南!linux高级编程教程,和阿里大佬的技术面谈

Java 程序员 后端

Redis灵魂14问,Java编程从入门到实践

Java 程序员 后端

Redis缓存:尚硅谷springboot百度云,Java中高级面试题总结

Java 程序员 后端

springcloud架构源码,慕课网极客学院,总结到位

Java 程序员 后端

Nginx如何支持HTTPS,“重金求来”Alibaba技术官并发编程笔记

Java 程序员 后端

SpringBoot,黑马java视频教程,绝对干货

Java 程序员 后端

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