Y a-t-il des autres files d'attente dans la bibliothèque standard?
-
27-10-2019 - |
Question
Je veux faire la queue
lambda : Popen(.....)
Pour appeler / attendre plus tard. Puis ajouter un peu plus à Popens fait une pause à la file d'attente, puis les consommer à nouveau et ainsi de suite.
Le module principal File d'attente se soucie beaucoup de la synchronisation, ce qui rend l'api se sentent un peu bizarre dans des endroits. Je ne me soucie pas de la synchronisation (un seul thread programme, Popen juste faire leur travail et jeter exception en cas d'erreur et ils ne portent pas atteinte l'environnement de toutes les façons importantes (elles génèrent des fichiers)
Devrais-je utiliser un générateur que j'ajoute à un moment plus tard. Si oui ce qui est une bonne façon d'ajouter des éléments générateurs, appelant
gena = itertools.chain(gena,[item))
semble chaque fois wastefull.
La solution
Oui, vous pouvez utiliser un deque (collections.deque), qui est une liste que vous pouvez efficacement pousser et pop à chaque extrémité. Vous pouvez également utiliser une liste et ne pas se soucier de l'inefficacité, car il n'a probablement pas.
Autres conseils
Vous pouvez utiliser collections.deque :
from collections import deque
queue = deque()
queue.append(new) # append
current = queue.popleft() # first item
Puisque vous n'êtes pas préoccupé par le multi-threading, le choix logique semble être collections.deque .