poll metodos asyncio python queue

python - metodos - Borrar todos los elementos de la cola



queue python 3 (3)

Esto parece hacerlo bastante bien para mí. Acepto comentarios / adiciones en caso de que me haya perdido algo importante.

class Queue(queue.Queue): '''''' A custom queue subclass that provides a :meth:`clear` method. '''''' def clear(self): '''''' Clears all items from the queue. '''''' with self.mutex: unfinished = self.unfinished_tasks - len(self.queue) if unfinished <= 0: if unfinished < 0: raise ValueError(''task_done() called too many times'') self.all_tasks_done.notify_all() self.unfinished_tasks = unfinished self.queue.clear() self.not_full.notify_all()

¿Cómo puedo borrar una cola? Por ejemplo, tengo datos en una cola, pero por alguna razón no necesito los datos existentes, y solo quiero borrar la cola.

¿Hay alguna manera? Esto funcionara:

oldQueue = Queue.Queue()


Simplemente no puede borrar la cola, porque cada vez que pone también agrega el miembro unfinished_tasks. El método de unión depende de este valor. Y all_tasks_done necesita ser notificado también.

q.mutex.acquire() q.queue.clear() q.all_tasks_done.notify_all() q.unfinished_tasks = 0 q.mutex.release()

o de manera decente, use get y task_done pair para borrar las tareas de forma segura.

while not q.empty(): try: q.get(False) except Empty: continue q.task_done()

o simplemente crea una nueva cola y elimina la anterior.


q = Queue.Queue() q.queue.clear()

EDITAR He omitido el tema de la seguridad del hilo para mayor claridad y brevedad, pero @Dan D es bastante correcto, lo siguiente es mejor.

q = Queue.Queue() with q.mutex: q.queue.clear()