我对asyncio还是很陌生,我不确定什么是实现我想要达到的最佳方法。
我有几个类,其中一个将实例化其他实例。当它接收到某些消息时,还将运行一个循环来监听消息,并调用其他类的方法。
问题是这些类也需要运行循环。目前,我在主班里有这个,作为__init__
def中的最后一件事:
...
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(self.loop)
self.loop.run_until_complete(self.start_services())
self.start_services()
然后继续做一些事情,等待发送一条消息以启动服务(一切正常),然后尝试实例化其他类:
# load TPE services
self.logger.log(f'Loading services for TPEs: {trading_pair_exchanges}...')
for tpe in trading_pair_exchanges:
TradingPairExchangeDataService.TradingPairExchangeDataService(tpe, ['EMA26'])
# load realtime service
self.logger.log('Loading RealtimeService...')
RealTimeDataService.RealTimeDataService(trading_pair_exchanges, ['EMA26'])
现在是问题所在。作为独立测试,这些类将像这样启动其异步功能(这将在__init__
def的末尾:
loop = asyncio.get_event_loop()
loop.run_until_complete(self.retrieve_real_time_data())
这不起作用,尽管看了几篇文章,但找不到解决方案,尽管我现在知道这就像在作业调度程序中启动作业调度程序一样。
我尝试等待,调用了一个非异步函数,该函数随后将等待self.retrieve_real_time_data()
,但是到目前为止没有任何效果。
如何轻松地在运行循环中从运行时的循环内部以及从__init__
到运行循环中添加异步方法?