深入Asyncio(十)异步解析式
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)}
这是个简单的异步生成器;
sleep一会,确保这是个异步函数;
观察如何用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]
一个简单的协程函数;
异步生成器;
返回一个包含函数和参数的tuple;
fac(3)返回一个异步生成器,必须用异步for调用,返回值是几个tuple,通过参数中的函数调用生成一个coroutine,用await处理coroutine,await与async for做的是完全不相关的事。
深入Asyncio(十)异步解析式的更多相关文章
- [Python 多线程] asyncio (十六)
asyncio 该模块是3.4版本加入的新功能. 先来看一个例子: def a(): for x in range(3): print('a.x', x) def b(): for x in 'abc ...
- 在Python中使用asyncio进行异步编程
对于来自JavaScript编码者来说,异步编程不是什么新东西,但对于Python开发者来说,async函数和future(类似JS的promise)可不是那么容易能理解的. Concurrency ...
- Python使用asyncio+aiohttp异步爬取猫眼电影专业版
asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访 ...
- asyncio之异步上下文管理器
异步上下文管理器 前面文章我们提到了上下文管理器,但是这个上下文管理器只适用于同步代码,不能用于异步代码(async def形式),不过不用担心今天我们就来讨论在异步中如何使用上下文管理器. 特别提醒 ...
- python3.5+ asyncio await异步详解
import asyncio,time from collections import defaultdict from pprint import pprint collect=defaultdic ...
- 用asyncio的异步网络连接来获取sina、sohu和163的网站首页
代码如下: import asyncio async def wget(host): print('wget %s...' % host) connect = asyncio.open_connect ...
- SpringBoot(十) 异步任务,定时任务和邮件任务
异步任务 “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的 ...
- 【译】深入理解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% ...
- asyncio异步IO--协程(Coroutine)与任务(Task)详解
摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口.在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理 ...
随机推荐
- 用正则表达式把页面中的px全部替换成rem
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- [LeetCode] String to Integer (atoi) 字符串
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- 【传输文件】文件传输协议FTP、SFTP和SCP
网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...
- TensorFlow中文社区---下载与安装
转自:http://www.tensorfly.cn/tfdoc/get_started/os_setup.html 下载与安装 你可以使用我们提供的二进制包, 或者使用源代码, 安装 TensorF ...
- formal parameter
formal parameter : [3.16] object declared as part of a function declaration or definition that acqui ...
- Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...
- 在本地(自己电脑上)部署了tomcat服务器,真机测试遇到的问题
开始的时候自己就是给app搭建了一个小的框架,只有一个界面发送了网络请求,部署的tomcat,数据成功请求,得到了数据. 后来随着联网请求的增多,突然发现联网请求一直失败.自己dubug了最开始的第一 ...
- 在Android 7.0以上PopupWindow.showAsDropDown()不起作用问题
最近优化界面,调用PopupWindow.showAsDropDown()发现,窗口并没有在控件下方显示. 有网友说是7.0以上系统的问题,可以自定义PopupWindow,重写showAsDropD ...
- HDU - 2970 Suffix reconstruction
Discription Given a text s[1..n] of length n, we create its suffix array by taking all its suffixes: ...
- 在WCF中使用websocket
今天在网上闲逛的时候,发现WCF4.5中新增了一个NetHttpBinding协议,它是支持Websocket的.在网上找了一下教程,附上codeproject上的两篇文章: http://www.c ...