Seltsames Verhalten der Asyncio-WarteschlangePython

Python-Programme
Anonymous
 Seltsames Verhalten der Asyncio-Warteschlange

Post by Anonymous »

Ich bin auf ein seltsames Verhalten der Asyncio-Warteschlange gestoßen, wenn die Methode get() nicht auf Nachrichten wartet, wenn die Warteschlange leer ist.
Der folgende Code verwendet eine einfache Klasse, um zu funktionieren mit einer Warteschlange. Ich führe einfach die start()-Methode aus, die die private __send()-Methode ausführt, in der wir auf Nachrichten aus der Warteschlange warten.
Nachrichten sollten später mit put() in die Warteschlange gestellt werden. Methode der Klasse.
Ich weiß, dass die Asyncio-Warteschlange nicht threadsicher ist, aber Threads werden nicht verwendet.
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())


In der Dokumentation heißt es, dass die Methode get() warten soll, wenn die Warteschlange leer ist. Aber tatsächlich erhalte ich unmittelbar nach dem Start eine Fehlermeldung.
Aufgabe wurde zerstört, steht aber noch aus!
Aufgabe:

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post