我正在尝试在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列表不断增长,流也不会收到有关该事件的通知... 我错了吗?还是有办法使它最终起作用?