我正在建立一个具有异步消费类,并使用

问题描述 投票:0回答:0
class Consumer: ... __init__() and stuff ... async def run(self): ... Connection stuff ... await self._queue.consume(self.handle_message) # This part I don't understand await self._loop.create_future() def close(self): self._channel.close() self._loop.stop() # Main part loop = asyncio.get_event_loop() consumer = Consumer(loop) try: loop.create_task(consumer.run()) loop.run_forever() except KeyboardInterrupt: consumer.close()

我的第一个问题是,我不明白为什么要添加该行

await self._loop.create_future()
是必要的。空虚的未来跑步看起来很奇怪。如果我删除它,它似乎工作正常。 我的第二期是,当我停止程序时,这条线会引起警告: Task was destroyed but it is pending! task: <Task pending name='Task-1' coro=<Consumer.run() running at scripts/consumer.py:59> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fdbfa0134f0>()]>>

,当我将未来存储在实例属性中时,警告消失了:

self._exit = self._loop.create_future() await self._exit

要使它变得更加干净,我也会在退出时取消未来,但似乎并没有改变任何事情:

def close(self): self._exit.cancel() self._channel.close() self._loop.stop()

那时我的问题是:
在这一行中到底发生了什么,完全删除它是正确的吗?

# This part I don't understand
await self._loop.create_future()
IT使运行功能更新。要优雅的退出运行函数,您需要将此未来放在属性中,

set_result

在另一个任务中。
	

python rabbitmq python-asyncio
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.