Python 대기열 데이터 구조 튜토리얼
Python의 마스터 FIFO 대기열 작업. 대기열에 넣기와 대기열에서 빼기 방법을 보여주는 대화형 대기열 예제를 실행하고 실행해 보세요.
개요
큐는 FIFO(선입선출) 원칙에 따라 작동하는 선형 데이터 구조입니다. 요소는 매장의 계산대 라인과 유사하게 뒤쪽에 추가되고(인큐) 앞쪽에서 제거됩니다(큐에서 빼기).
대기열은 도착하는 순서대로 작업을 처리하기 위해 컴퓨터 과학에서 매우 중요합니다. 생산자와 소비자 프로세스를 분리하는 버퍼 역할을 합니다.
Python은 기본 목록, 스레드로부터 안전한 빠른 작업을 위한 `collections.deque` 모듈, 멀티스레드 애플리케이션을 위해 특별히 설계된 `queue.Queue` 모듈 등 대기열을 구축하는 다양한 방법을 제공합니다.
코드 및 실행 출력
효율적인 전면 제거 작업을 위해 collections.deque를 사용하여 구축된 대화형 FIFO 대기열입니다.
queue_demo.py
에디터에서 사용해 보세요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)}")터미널 출력
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']단계별 구현
- 서버 웹 프레임워크에서 비동기 요청 처리
- 운영 체제의 작업 예약 대기열
- 메시지 브로커 및 큐 버퍼(예: RabbitMQ 또는 Redis)
자주 묻는 질문
Python에서 대기열을 제거하기 위해 list.pop(0)을 사용하지 않는 이유는 무엇입니까?
`list.pop(0)`을 사용하면 메모리의 모든 후속 요소를 한 인덱스 왼쪽으로 이동해야 하므로 속도가 느려지고 결과적으로 O(n) 성능이 발생합니다. 대조적으로 `deque.popleft()`는 O(1) 상수 시간에 실행됩니다.
우선순위 대기열이란 무엇입니까?
우선순위 대기열은 도착 순서가 아닌 관련 우선순위에 따라 요소가 제공되는 변형입니다. Python은 `heapq` 모듈을 통해 이를 구현합니다.