当前位置:网站首页>异步迭代器 & 异步生成器 & 异步上下文管理器
异步迭代器 & 异步生成器 & 异步上下文管理器
2022-04-22 05:48:00 【zzzzls~】
异步迭代器
类似迭代器, 实现了 __aiter__() 和 __anext__() 方法, 并且返回一个awaitable对象
obj.__aiter__(self):
return 异步迭代器
obj.__anext__(self):
return 迭代器下一个结果值, 结束时抛出 `StopAsyncIteration` 错误
# 示例
import asyncio
class Reader:
def __init__(self):
self.i = 0
def __aiter__(self):
return self
async def get_next(self):
self.i += 1
if self.i >= 100:
return None
else:
return self.i
async def __anext__(self):
next = await self.get_next()
if next:
return next
else:
raise StopAsyncIteration
async def main():
# async for 需要写在协程函数中
async for item in Reader():
print(item)
asyncio.run(main())
异步上下文管理器
实现 __aenter__() 和 __aexit__() 的方法就是一个异步上下文管理器
import asyncio
class AsyncContextManager:
def __init__(self):
self.conn = None
async def __aenter__(self):
print('进入上下文...')
self.conn = await asyncio.sleep(1)
return self
async def __aexit__(self, exc_type, exc, tb):
print('离开上下文...')
# self.conn.close()
async def dosomething(self):
print('执行xxx')
return '666'
async def main():
async with AsyncContextManager() as f:
res = await f.dosomething()
print(res)
asyncio.run(main())
异步生成器
import asyncio
async def gener():
for i in range(1, 100):
yield i
await asyncio.sleep(1)
async def test():
async for item in gener():
print(item)
async def main():
tasks = [asyncio.create_task(test()) for _ in range(3)]
await asyncio.wait(tasks)
asyncio.run(main())
版权声明
本文为[zzzzls~]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_36078992/article/details/120008035
边栏推荐
猜你喜欢
随机推荐
形参、局部变量以及局部静态变量
软考备考通关经验心得
Analysis of Modbus Protocol in TCP communication
re将Form表单转json
Complete binary tree
oracle 高效复制百万数据
在components文件夹下创建Tabbar组件,公用
halcon与opencv或者halcon配置修改包含目录、库目录继承值的问题
Apex上拉菜单(编辑、置顶、删除、取消)
QQueue使用介绍
FastApi(一)
Dynamic memory management, file operation, preprocessing
倒序输出字符串
v-if 和 v-for 为什么不能连用
2020-10-28
Pytest (I)
2021-10-12
phphphphphphphp
【三角形 杨辉三角 打印奇偶数循环 js for break 循环】
Directive redis








