Непрерывно потреблять из очереди с Aio-PikaPython

Программы на Python
Anonymous
Непрерывно потреблять из очереди с Aio-Pika

Сообщение Anonymous »

Я строю асинхронный потребительский класс с Aio-pika для постоянного извлечения сообщений из очереди RabbitMQ. На основе документации мой код выглядит следующим образом: < /p>

Код: Выделить всё

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: 
< /code>
Как ни странно, когда я храню будущее в атрибуте экземпляра, предупреждение исчезает: < /p>
self._exit = self._loop.create_future()
await self._exit
< /code>
Чтобы сделать его чище, я также отменяю будущее после выхода, но, похоже, это ничего не меняет: < /p>
def close(self):
self._exit.cancel()
self._channel.close()
self._loop.stop()
Мой вопрос тогда: Что именно происходит в этой строке и правильно ли удалить его полностью?

Подробнее здесь: https://stackoverflow.com/questions/719 ... h-aio-pika

Вернуться в «Python»