J'ai besoin d'une file d'attente dans laquelle plusieurs threads peuvent mettre des éléments et à partir de laquelle plusieurs threads peuvent lire.
Python a au moins deux classes de files d'attente, Queue.Queue et collections.deque, la première utilisant apparemment la seconde en interne. Les deux prétendent être thread-safe dans la documentation.
Cependant, la documentation de la file d'attente indique également:
collections.deque est une implémentation alternative de files d'attente illimitées avec des opérations atomiques rapides append () et popleft () qui ne nécessitent pas de verrouillage.
Ce que je suppose que je ne comprends pas tout à fait: cela signifie-t-il que deque n'est pas entièrement thread-safe après tout?
Si c'est le cas, je ne comprends peut-être pas entièrement la différence entre les deux classes. Je peux voir que Queue ajoute une fonctionnalité de blocage. D'autre part, il perd certaines fonctionnalités deque comme la prise en charge de l'opérateur interne.
Accéder directement à l'objet deque interne est
x dans la file d'attente (). deque
thread-safe?
Aussi, pourquoi Queue utilise-t-il un mutex pour ses opérations alors que deque est déjà thread-safe?
deque
itération en cours, même dans le même thread. La seule raison pour laquelle vous ne pouvez pas obtenir cette erreur Queue
est qu'elle Queue
ne prend pas en charge l'itération.
RuntimeError: deque mutated during iteration
est ce que vous pourriez obtenir est d'utiliser un partagedeque
entre plusieurs threads et pas de verrouillage ...