Effacer tous les éléments de la file d'attente
Comment puis-je supprimer une file d'attente. Pour exemple, j'ai des données dans une file d'attente, mais pour une raison que je n'avez pas besoin de les données existantes, et vous voulez juste pour effacer la file d'attente.
Est-il de toute façon? Ce travail sera:
oldQueue = Queue.Queue()
- Si vous lisez la documentation, il vous renvoie à la File d'attente du module dernière source, et là, on pouvait voir que la représentation interne d'une file d'attente FIFO est un
deque
. Dans la documentation dedeque
vous avais remarque qu'il a unclear()
méthode, qui est ce que vous voulez. Vous auriez probablement souhaitez également envelopper cet appel avec unq.mutex.acquire()
etq.mutex.release()
que le reste du code ne autour de ces opérations pour la rendre thread-safe.
Vous devez vous connecter pour publier un commentaire.
MODIFIER
J'ai omis la question de la sécurité des threads pour plus de clarté et de concision, mais @Dan D est tout à fait correct, la suite est mieux.
with q.mutex: q.queue.clear()
, cette opération pourrait être thread-safe..mutex
et.queue
semble être sans-papiers et si je ne me trompe pas, à l'aide deq.mutex
serait dead-lock si vous faites quelque chose comme mêmeq.get_nowait
à l'intérieur de son bloc.q.queue.clear()
est vissage avec le fonctionnement interne directement.Vous juste ne pouvez pas effacer la file d'attente, parce que tous les mettre également ajouter le unfinished_tasks membre.
La jointure de la méthode dépend de cette valeur.
Et all_tasks_done doit être notifiée aussi.
ou de façon décente, utilisez get et task_done paire de retirer des tâches.
ou tout simplement créer une nouvelle File d'attente et supprimer l'ancien.
Cela semble le faire assez bien pour moi. Je vous souhaite la bienvenue commentaires/ajouts au cas où j'ai oublié quelque chose d'important.
.clear()
) et de rectification (notifications qui incluent actuellement les éléments transformés) façon de le faire.