如何使用aiostream python lib创建异步流的合并流,同时继续向同一个合并流中添加新的异步流

时间:2019-10-28 22:09:41

标签: python python-asyncio

我正在尝试在python 3.7中实现事件流,该事件流获取要注册的事件列表, 使用HTTP Get请求向每个事件注册,并将响应流传输到套接字,同时保持轮询相同的API以获得已注册事件的更新。 由于事件ID列表是动态的并且不断增长,因此我需要一种创建流的方法,同时仍然能够更新事件ID列表,注册并将响应合并到同一打开的流中。

以下是我使用的代码段:

from aiostream import stream

class MyEventStream:

  def __init__(self, *args, **kwargs):
    self.events_stream = list()

  async def create_stream(self):
    merged_events = stream.merge(*self.events_stream)
    async with merged_events.stream() as streamer:
      async for events in streamer:
        yield events

  async def register_new_events(self, events: list):
    self.events_stream.append(await self.api_polling(events))


if __name__ == '__main__':
    print('start')
    m_loop = asyncio.get_event_loop()
    m_loop.run_until_complete(asyncio.gather(
      my_event_stream = MyEventStream()
      my_event_stream.register_new_events([1,2,3])
      my_event_stream.create_stream()
      my_event_stream.register_new_events([4,5,6])
      my_event_stream.register_new_events([7,8,9])
    ))
    print('end')

在代码的另一个位置,我从流中获取事件,然后将它们刷新到用于将事件流传输到另一个应用程序的套接字。现在,我注意到,在流创建之前,我仅从首次注册的事件中获取事件更新。但是在创建流之后,不会再更新所有其他注册事件的调用。

看起来,一旦创建了流,即使事件ID列表不断增长,流也不会收到有关该事件的通知... 我错了吗?还是有办法使它最终起作用?

0 个答案:

没有答案