Приведенный ниже код использует для работы простой класс с очередью. Я просто запускаю метод start(), который запускает частный метод __send(), в котором мы ожидаем сообщений из очереди.
Сообщения должны быть поставлены в очередь позже с помощью put(). метод класса.
Я знаю, что очередь asyncio не является потокобезопасной, но потоки не используются.
Код: Выделить всё
import asyncio
class MessageQueue:
def __init__(self):
self.proc = None
self.queue = asyncio.Queue()
async def start(self):
self.proc = asyncio.create_task(self.__send())
async def stop(self):
if self.proc is not None:
self.proc.cancel()
async def put(self, mobj):
await self.queue.put(mobj)
async def __send(self):
logger.info('Starting queue.')
while True:
try:
# if not self.queue.empty():
msg = await self.queue.get()
logger.info(msg)
except Exception as e:
logger.error(f'Error sending the message: {e}')
async def launch():
queue = MessageQueue()
await asyncio.gather(queue.start())
asyncio.run(launch())
Задача была уничтожена, но она ожидает выполнения!
задача:
Подробнее здесь: https://stackoverflow.com/questions/793 ... ncio-queue
Мобильная версия