多个类之间的异步

2024-06-16 12:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我对asyncio还比较陌生,我不确定什么是实现我想要的目标的最佳方法

我有几个类,其中一个将实例化其他类的实例。它还将运行一个侦听消息的循环,并在接收到某些消息时调用其他类的方法

问题是这些类还需要运行循环。目前,我在我的主类中有这个,作为__init__定义中的最后一件事:

    ...
    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__定义的末尾:

    loop = asyncio.get_event_loop()
    loop.run_until_complete(self.retrieve_real_time_data())

这不起作用,我看了一些文章,但找不到解决方案,尽管我现在知道这就像在作业调度器中启动作业调度器

我尝试过等待,调用一个非异步函数,然后等待self.retrieve_real_time_data(),但到目前为止没有任何效果

我可以做些什么来轻松地将异步方法添加到正在运行的循环中,在循环运行时从循环内部,以及从__init__


Tags: 实例方法runselfloopeventasyncio消息