深入Asyncio(九)异步生成器
Async Generators:yield inside async def functions
如果在async def中使用yield会发生什么,答案就是生成一个异步生成器函数,如果有生成器、协程例如Twisted、Tornado等框架或者yield from的使用经验,就会觉得困惑。
因此在继续学习之前,要先铭记这几个重点:
1. 协程和生成器是完全不同的概念;
2. 异步生成器与普通生成器的用法差不多;
3. 对于有IO的迭代,用async for替代普通的for。
前一章用异步迭代器来演示与Redis进行交互,其实用异步生成器更容易。
import asyncio
from aioredis import create_redis
async def main():
redis = await create_redis(('localhost', 6379))
keys = ['America', 'Africa', 'Europe', 'Asia']
async for value in one_at_a_time(redis, keys): # 1
await process(value)
async def one_at_a_time(redis, keys): # 2
for k in keys:
value = await redis.get(k) # 3
yield value # 4
asyncio.get_event_loop().run_until_complete(main())
几乎一样,只是改了个名字;
现在用async def声明函数,并且函数内使用了yield,则可以将其认定为异步生成器函数;
不需要像之前的例子那么复杂,直接让loop来处理;
像一个普通的生成器一样yield值。
就像普通生成器让代码更简短,在异步编程中异步生成器也具有相同的优点,可能对于初学者来说还有些复杂,但是多练习一下就会适应了。
深入Asyncio(九)异步生成器的更多相关文章
- 在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 ...
- jQuery源码分析(九) 异步队列模块 Deferred 详解
deferred对象就是jQuery的回调函数解决方案,它解决了如何处理耗时操作的问题,比如一些Ajax操作,动画操作等.(P.s:紧跟上一节:https://www.cnblogs.com/grea ...
- 【Python学习之九】asyncio—异步IO
asyncio 这是python3.4引入的标准库,直接内置对异步IO的支持.asyncio的编程模型就是一个消息循环.从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程 ...
- 【译】深入理解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中用于处理协程和任务的方法和接口.在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理 ...
随机推荐
- duilib入门简明教程 -- XML基础类(7) (转)
原文转自:http://www.cnblogs.com/Alberl/p/3343743.html 现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是 ...
- 使用layer的iframe层提交表单后,需要关闭当前的iframe层,然后刷新父页面的方法2
<input type="button" onclick="edit(${it.id?c})" class="layui-btn layui-b ...
- Python 数据类型-2
序列 包括:字符串 列表 元组 索引操作和切片操作 索引操作:可以从序列中抓取一个特定的项目 切片操作: 获取序列的一个切片,即一部分序列 序列的通用方法: len() 求序列的长度 + 连接2个序列 ...
- 洛谷—— P1609 最小回文数
https://www.luogu.org/problemnew/show/1609 题目描述 回文数是从左向右读和从右向左读结果一样的数字串. 例如:121.44 和3是回文数,175和36不是. ...
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...
- 我的CSS初始化,reset.css
* { margin:; padding:; text-decoration: none; -webkit-overflow-scrolling: touch !important; /*iOS惯性滚 ...
- Jsp2.0自定义标签(第一天)——一个简单的例子
今天是学习自定义标签的第一天 Jsp2.0以来,自定义标签的实现比传统标签的实现容易了很多,一般只要extends类SimpleSupport重写doTag()方法即可. 先看最简单的例子,输出一个H ...
- python 浮点数保留小数
http://www.cnblogs.com/Raymon-Geng/p/5784290.html 这里有三种方法, round(a,2) '%.2f' % a Decimal('5.000').qu ...
- git-for-windows 安装无图标的问题
git-for-windows.ico 安装无图标的问题 一. 问题表现: 桌面图标与右建菜单图标,所是未知文件的图标, 二. 问题解决: 在shard/git/ copy 一个ico 文件(如git ...
- 2017.04.20 Adams仿真介绍
Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...