Поддерживает ли Python операции в функциональном стиле на асинхронных итераторах?Я знаю, что могу использовать map
, filter
и itertools
для ленивого преобразования и потребления данных, поступающих из обычных генераторов:
from itertools import accumulate, takewhile
def generator():
a, b = 1, 1
while True:
yield a
a, b = b, a + b
# create another iterator, no computation is started yet:
another_iterator = takewhile(lambda x: x < 100, accumulate(generator()))
# start consuming data:
print(list(another_iterator))
# [1, 2, 4, 7, 12, 20, 33, 54, 88]
Теперь, то же самое не поддерживается в Python 3.6асинхронные генераторы / итераторы, потому что, конечно, они не реализуют обычный протокол итератора:
async def agenerator():
a, b = 1, 1
while True:
yield a
a, b = b, a + b
accumulate(agenerator())
TypeError: объект 'async_generator' не повторяется
Есть ли какой-то видasync map или async itertools для достижения такого же ленивого поведения в Python 3.6 / 3.7?