Salut Comment copier en profondeur une file d'attente en python? Mercicomment copier en profondeur une file d'attente en python
Répondre
Je ne connais pas votre besoin exact, mais il se pourrait que vous soyez intéressé par ce code que j'ai posté dans la discussion DaniWeb sur la priorité de la file d'attente. La liste est facile d'enregistrer une copie par tranchage etc.
#Python 2.6.5
from random import randint
class Priority:
def __init__(self,prioritylevels=5):
"""The constructor builds list for priority queue which would be used later
"""
self.prioritylevels = prioritylevels
self.pq = [[] for priority in range(self.prioritylevels)] # prioritylevels
def add_to_queue(self, data, priority=None):
"""Add every received in data and use priority parameter or
its priority key to get its priority value (1 == highest) in the global queue
"""
if priority is None: priority = data['priority']-1
else: priority -= 1
if 0 <= priority < self.prioritylevels:
self.pq[priority].append(data)
else: raise ValueError,"Priority level out of bounds: %s" % priority
def get(self):
""" get lowest priority values first from queue """
for priorityevents in self.pq:
while priorityevents:
yield priorityevents.pop(0) ## use list as queue to keep insertion order (remove from front)
def num_items(self):
return sum(len(q) for q in self.pq)
if __name__ == '__main__':
myqueue = Priority(8)
for i in range(100000):
item=randint(0,234234)
if not i % 10000: print i,
priority=(item & 0b111) +1 ## lets three lowest bits decide which priority we give
myqueue.add_to_queue(('Number',item),priority=priority)
print "\n%i items in queues" % myqueue.num_items()
print "Items by priorities"
print '\n'.join("%i: %i" % (priority+1,len(q)) for priority, q in enumerate(myqueue.pq))
print "\nGetting items out of queue in priority order:"
priority=0
for description,i in myqueue.get():
assert (i & 0b111 >= priority), '** Bug ***' ## validity test priority must be same or lower for items
priority = i & 0b111
# empty after get
print "Finished"
print "%i items in queue" % myqueue.num_items()
Le queue
module en Python est utilisé pour synchroniser des données partagées entre les threads. C'est pas conçu comme une structure de données et il ne supporte pas la copie (même pas la copie superficielle).
(Il est possible de construire de nombreuses années deepcopy d'une file d'attente par .get
et .put
, mais l'original File d'attente sera détruite.)
Si vous voulez avoir une file d'attente (ou pile) en tant que structure de données, use a collections.deque
. Si vous voulez une file d'attente prioritaire, utilisez le heapq
module. Le deque prend en charge la copie profonde. heapq est soutenu par une liste, donc deepcopy est également supporté.
- 1. Comment copier en profondeur un objet DateTime?
- 2. Comment copier en profondeur une proc dans Ruby?
- 3. Comment copier une image distante en python?
- 4. Comment copier en profondeur un vecteur dans J2ME/BlackBerry?
- 5. copier plusieurs fichiers en python
- 6. hashtable de copie en profondeur
- 7. C++ Comment copier en profondeur une structure avec un type de données inconnu?
- 8. Une méthode plus simple pour copier en profondeur une classe WebService AutoGenerated
- 9. File d'attente de paquets en Python?
- 10. Comment faire une copie en profondeur des objets NHibernate?
- 11. python import profondeur
- 12. Python: Mat-File en valeurs hexadécimales
- 13. Recréer Postgres COPIER directement en Python?
- 14. Quelle est la meilleure façon de copier en profondeur un hachage de hachage en Perl?
- 15. jQuery Lier une application Web en profondeur
- 16. Python: Obtenir des objets en profondeur? (? Bibliothèque set)
- 17. Copier les fichiers dans le dossier d'un répertoire en python
- 18. Ruby: Paperclip, S3, et clonage en profondeur
- 19. Déterminez la profondeur de bit MP3 en Python via Mutagen
- 20. Clone (copie en profondeur) Entité LINQ
- 21. C# en profondeur: Problème réglé?
- 22. profondeur de rendu en HLSL
- 23. Comment copier un fichier en utilisant NSIS?
- 24. Profondeur de suivi en récursivité
- 25. Python (pdb) - Mise en file d'attente des commandes à exécuter
- 26. Comment puis-je convertir une chaîne en "commande" en Python?
- 27. Comment itérer une dictée de "profondeurs" dynamiques en python?
- 28. Comment copier un répertoire en lecture seule en Perl?
- 29. Implémentation d'un type spécial de file d'attente multitraitement en Python
- 30. Python regex: Tournez "ThisFileName.txt" en "This File Name.txt"
Pourquoi voulez-vous faire cela? Notez qu'une file d'attente n'est pas conçue comme une structure de données. – kennytm