Tutoriel sur la structure des données de la file d'attente Python

Maîtrisez les opérations de file d’attente FIFO en Python. Exécutez et exécutez notre exemple de file d'attente interactive présentant les méthodes de mise en file d'attente et de retrait de la file d'attente.

Essayez dans l'éditeur

Aperçu

Une file d'attente est une structure de données linéaire fonctionnant selon le principe premier entré, premier sorti (FIFO). Les éléments sont ajoutés à l'arrière (mise en file d'attente) et retirés de l'avant (retrait de la file d'attente), un peu comme une file d'attente à la caisse dans un magasin.

Les files d'attente sont essentielles en informatique pour traiter les tâches dans l'ordre exact dans lequel elles arrivent. Ils agissent comme des tampons qui dissocient les processus de production et de consommation.

Python propose plusieurs façons de créer des files d'attente : des listes de base, le module `collections.deque` pour des opérations rapides sécurisées pour les threads et le module `queue.Queue` spécialement conçu pour les applications multithread.

Sortie de code et d'exécution

Une file d'attente FIFO interactive construite à l'aide de collections.deque pour des opérations efficaces de suppression de front.

from collections import deque

class Queue:
    def __init__(self):
        self.buffer = deque()
        
    def enqueue(self, item):
        self.buffer.append(item)
        print(f"Enqueued: {item}")
        
    def dequeue(self):
        if self.is_empty():
            return "Underflow: Queue is empty"
        dequeued = self.buffer.popleft()
        print(f"Dequeued: {dequeued}")
        return dequeued
        
    def is_empty(self):
        return len(self.buffer) == 0
        
    def size(self):
        return len(self.buffer)

# Test the Queue
q = Queue()
q.enqueue("Customer 1")
q.enqueue("Customer 2")
q.enqueue("Customer 3")

print(f"Queue Size: {q.size()}")
q.dequeue()
q.dequeue()

print(f"Remaining in Queue: {list(q.buffer)}")
Sortie terminale
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']

Mise en œuvre étape par étape

  • Gestion des requêtes asynchrones dans les frameworks Web de serveur
  • Files d'attente de planification des tâches dans les systèmes d'exploitation
  • Courtiers de messages et tampons de file d'attente (comme RabbitMQ ou Redis)

Foire aux questions

Pourquoi ne pas utiliser list.pop(0) pour retirer la file d'attente en Python ?

L'utilisation de `list.pop(0)` est lente car elle nécessite de déplacer tous les éléments suivants en mémoire d'un index vers la gauche, ce qui entraîne des performances O(n). En revanche, `deque.popleft()` s'exécute en temps constant O(1).

Qu'est-ce qu'une file d'attente prioritaire ?

Une file d'attente prioritaire est une variante dans laquelle les éléments sont servis en fonction d'une priorité associée plutôt que d'un ordre d'arrivée. Python implémente cela via le module `heapq`.

Sujets connexes