Асинхронный Python itertools объединяет несколько генераторовPython

Программы на Python
Ответить
Anonymous
 Асинхронный Python itertools объединяет несколько генераторов

Сообщение Anonymous »

ОБНОВЛЕННЫЙ ВОПРОС ДЛЯ ЯСНОСТИ:
предположим, у меня есть 2 функции-генератора обработки:

Код: Выделить всё

def gen1(): # just for examples,
yield 1   # yields actually carry
yield 2   # different computation weight
yield 3   # in my case

def gen2():
yield 4
yield 5
yield 6
Я могу связать их с помощью itertools

Код: Выделить всё

from itertools import chain

mix = chain(gen1(), gen2())
и затем я могу создать с его помощью еще один объект функции-генератора,

Код: Выделить всё

def mix_yield():
for item in mix:
yield item
или просто, если я просто хочу перейти к следующему (смешать), он там.
Мой вопрос: как я могу сделать эквивалент в асинхронном коде?
Потому что мне это нужно, чтобы:
  • вернуть доходность (один за другим) или со следующим итератором
  • сначала самый быстрый разрешенный выходной результат (асинхронный)
ПРЕД. ОБНОВЛЕНИЕ:
После экспериментов и исследований я нашел библиотеку aiostream, которая заявлена ​​как асинхронная версия itertools, и что я сделал:

Код: Выделить всё

import asyncio
from aiostream import stream

async def gen1():
await asyncio.sleep(0)
yield 1
await asyncio.sleep(0)
yield 2
await asyncio.sleep(0)
yield 3

async def gen2():
await asyncio.sleep(0)
yield 4
await asyncio.sleep(0)
yield 5
await asyncio.sleep(0)
yield 6

a_mix = stream.combine.merge(gen1(),gen2())

async def a_mix_yield():
for item in a_mix:
yield item
но я все еще не могу сделать следующее (a_mix)

Код: Выделить всё

TypeError: 'merge' object is not an iterator
или дальше (ожидайте a_mix)

Код: Выделить всё

raise StreamEmpty()
Хотя я все равно могу составить список:

Код: Выделить всё

print(await stream.list(a_mix))
# [1, 2, 4, 3, 5, 6]
итак, одна цель достигнута, осталось еще одна:
  • возврат в доходности (один за другим) или с помощью следующего итератора
     – сначала выполняется самый быстрый выход (асинхронный)


Подробнее здесь: https://stackoverflow.com/questions/534 ... generators
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»