Async Comprehensions

目前已经学会了如何在Python中进行异步迭代,接下来的问题是这是否适用于解析式?答案是OJBK!该支持在PEP 530中提及,建议去读一下。

>>> import asyncio
>>> async def doubler(n):   # 1
...     for i in range(n):
...             yield i, i*2
...             await asyncio.sleep(0.1)    # 2
>>> async def main():
...     result = [x async for x in doubler(3)]  # 3
...     print(result)
...     result = {x: y async for x, y in doubler(3)}
...     print(result)
...     result = {x async for x in doubler(3)}
...     print(result)
>>> asyncio.get_event_loop().run_until_complete(main())
[(0, 0), (1, 2), (2, 4)]
{0: 0, 1: 2, 2: 4}
{(1, 2), (0, 0), (2, 4)}
  1. 这是个简单的异步生成器;

  2. sleep一会,确保这是个异步函数;

  3. 观察如何用async for替代for;


在PEP 530后半段有介绍在解析式中使用await,但要注意的是,await只能在async def函数体中使用。

继续用例子来熟悉异步编程语法。

>>> import asyncio
>>> async def f(x):    # 1
...     await asyncio.sleep(0.1)
...     return x + 100
>>> async def fac(n):   # 2
...     for x in range(n):
...             await asyncio.sleep(0.1)
...             yield f, x  # 3
>>> async def main():
...     results = [await f(x) async for f, x in fac(3)]    # 4
...     print('results=', results)
>>> asyncio.get_event_loop().run_until_complete(main())
results= [100, 101, 102]
  1. 一个简单的协程函数;

  2. 异步生成器;

  3. 返回一个包含函数和参数的tuple;

  4. fac(3)返回一个异步生成器,必须用异步for调用,返回值是几个tuple,通过参数中的函数调用生成一个coroutine,用await处理coroutine,awaitasync for做的是完全不相关的事。

深入Asyncio(十)异步解析式的更多相关文章

  1. [Python 多线程] asyncio (十六)

    asyncio 该模块是3.4版本加入的新功能. 先来看一个例子: def a(): for x in range(3): print('a.x', x) def b(): for x in 'abc ...

  2. 在Python中使用asyncio进行异步编程

    对于来自JavaScript编码者来说,异步编程不是什么新东西,但对于Python开发者来说,async函数和future(类似JS的promise)可不是那么容易能理解的. Concurrency ...

  3. Python使用asyncio+aiohttp异步爬取猫眼电影专业版

    asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访 ...

  4. asyncio之异步上下文管理器

    异步上下文管理器 前面文章我们提到了上下文管理器,但是这个上下文管理器只适用于同步代码,不能用于异步代码(async def形式),不过不用担心今天我们就来讨论在异步中如何使用上下文管理器. 特别提醒 ...

  5. python3.5+ asyncio await异步详解

    import asyncio,time from collections import defaultdict from pprint import pprint collect=defaultdic ...

  6. 用asyncio的异步网络连接来获取sina、sohu和163的网站首页

    代码如下: import asyncio async def wget(host): print('wget %s...' % host) connect = asyncio.open_connect ...

  7. SpringBoot(十) 异步任务,定时任务和邮件任务

    异步任务 “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的 ...

  8. 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

    转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...

  9. asyncio异步IO--协程(Coroutine)与任务(Task)详解

    摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口.在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理 ...

随机推荐

  1. GridView数据导入Excel/Excel数据读入GridView

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] 效果图: 解决方案:页面增加一个按钮,单击事件添加如下方法:protected void Button1_Clic ...

  2. [LeetCode] Single Number II 位运算

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  3. FileInputStream/FileOutputStream的应用

    这是一对继承于InputStream和OutputStream的类,用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象): 本地文件读写编程的基本过程为: ①  生成文 ...

  4. Mac air苹果笔记本安装Win10双系统教程(绝对能成功,超详细!)[转]

    转自:http://www.xitonghe.com/jiaocheng/anzhuang-4676.html 在MAc苹果电脑,Mac air上安装Windows7相信大家都已经会了吧,好吧Win7 ...

  5. 【Linux】可重入函数和线程安全的区别与联系【转】

    转自:http://blog.csdn.net/scenlyf/article/details/52074444 版权声明:本文为博主原创文章,未经博主允许不得转载. *****可重入函数 函数被不同 ...

  6. netbeans8.2下struts2的Java Web开发Demo1

    struts2框架主要是封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码. 过去,我们用jsp和servlet搭配,实现展现时,大体的过程是: ...

  7. linux 实现共享内存同步

    本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.它是IPC对象的一种. 为了在多个进程间交换信息,内核专门留出了 ...

  8. web项目中引入jquery easyui

    jQuery easyui是一个基于jquery的用户界面插件集合,可以做出各种炫酷页面效果,大中型项目都可以使用些框架,非常好用,而且它有中文网,提供了大量的demo.下面我们看怎么将它引入到项目中 ...

  9. LeetCode OJ-- Maximum Subarray @

    https://oj.leetcode.com/problems/maximum-subarray/ 给了一个数组一列数,求其中的连续子数组的最大和. O(n)复杂度 class Solution { ...

  10. Oracle数据库搭建