Я пытаюсь воспроизвести реактивные расширения "разделяемой" наблюдаемой концепции с генераторами Python.
Скажем, у меня есть API, который дает мне бесконечный поток, который я могу использовать так:
def my_generator():
for elem in the_infinite_stream():
yield elem
Я мог бы использовать этот генератор несколько раз так:
stream1 = my_generator()
stream2 = my_generator()
И the_infinite_stream()
будет вызываться дважды (один раз для каждого генератора).
Теперь скажите, что the_infinite_stream()
- дорогостоящая операция. Есть ли способ "разделить" генератор между несколькими клиентами? Похоже, что тройник бы сделать это, но я должен заранее знать, как много независимых генераторов я хочу.
Идея состоит в том, что в других языках (Java, Swift), использующих реактивные расширения (RxJava, RxSwift) "разделяемые" потоки, я могу удобно дублировать поток на стороне клиента. Мне интересно, как это сделать в Python.
Примечание: я использую asyncio