异步 `zip` 类似聚合器,用于 `async for`
项目描述
AsyncZip 是一个类似于 zip 的简单函数,用于异步可迭代对象。它在许多方面都类似于 asyncio.wait。
用法
给定 n 个异步可迭代对象,AsyncZip(*aiterables) 会返回一个新的异步可迭代对象,遍历所有这些对象。类似于 asyncio.wait,可以使用选项 FIRST_COMPLETED 等待任何可迭代对象产生值,或者使用选项 ALL_COMPLETED 等待所有可迭代对象。
class AsyncZip
def __init__(self, *asynchronous_iterables, loop=None, yield_when=FIRST_COMPLETED):
asynchronous_iterables: 一组异步可迭代对象
loop: 可选命名参数,用于指定特定的事件循环
yield_when: 类似于 asyncio.wait 中的 return_when,可以是 FIRST_COMPLETED 或 ALL_COMPLETED。
FIRST_COMPLETED, ALL_COMPLETED
yield_when 可以取的两个值,FIRST_COMPLETED 和 ALL_COMPLETED,告诉 AsyncZip 应该何时产生值。默认为 FIRST_COMPLETED。
FIRST_COMPLETED
类似于 select,当 AsyncZip 在尽可能快的时间内产生每个可迭代对象的值时,它会产生。
ALL_COMPLETED
这是经典的 zip 模式,其中 AsyncZip 在产生所有值之前,会等待每个迭代器的值。
示例用法
import asyncio
from asynczip import AsyncZip
class DummyAsyncIterable:
def __init__(self, items):
self.items = items
async def __aiter__(self):
return self
async def __anext__(self):
try:
return self.items.pop(0)
except IndexError:
raise StopAsyncIteration
async def test():
async for items in AsyncZip(DummyAsyncIterable(list("foo")),
DummyAsyncIterable(list("bar"))):
print(items)
asyncio.get_event_loop().run_until_complete(test())
给出
[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='f'>,<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='b'>]
[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='o'>, <Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='a'>]
[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='o'>, <Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='r'>]
项目详情
关闭
asynczip-1.0.7.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eea2b2375256dce6da2457d79212deb1c7861146238853be6c5c15aa5be8ebfc |
|
MD5 | 070863ec67dcebb4851ef5cf515e2665 |
|
BLAKE2b-256 | 867f47f404eae0286669a02bd929c220bca6fadf63d38672c935075885b2026a |