Ci sono altre code nella libreria standard?
-
27-10-2019 - |
Domanda
Voglio fare la fila
lambda : Popen(.....)
Per chiamare/attendere in un secondo momento. Quindi aggiungi un po 'di più per fare pause in pausa alla coda, quindi consumarle di nuovo e così via.
Il modulo di coda principale si preoccupa molto della sincronizzazione e questo rende l'API un po 'strana in alcuni punti. Non mi interessa la sincronizzazione (programma a filo singolo, Popen fa il proprio lavoro e lancia un'eccezione sull'errore e non influiscono sull'ambiente in alcun modo importante (generano file)
Dovrei solo usare un generatore che lo aggiungo in un secondo momento. In tal caso, qual è un buon modo per aggiungere oggetti ai generatori, chiamando
gena = itertools.chain(gena,[item))
Ogni volta sembra spreco.
Soluzione
Sì, puoi usare un deque (collections.deque), che è un elenco che è possibile spingere in modo efficiente e pop su entrambe le estremità. Potresti anche usare un elenco e non preoccuparti dell'inefficienza poiché probabilmente non importa.
Altri suggerimenti
Puoi usare Collections.deque:
from collections import deque
queue = deque()
queue.append(new) # append
current = queue.popleft() # first item
Dato che non sei preoccupato per il multi-threading, la scelta logica sembrerebbe essere Collections.deque.