본문 바로가기

Developer/Python

[python] 큐(Queue) 라이브러리 사용하기 - Queue, LifoQueue, PriorityQueue

Queue

queue 의 기본인 FIFO(First In First Out)

Queue는 멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해 많이 사용된다 (운영체제)

 

Enqueue : 큐에 데이터를 넣는 기능

Dequeue : 큐에서 데이터를 꺼내는 기능

 

queue 라이브러리에는 Queue(), LifoQueue(), PriorityQueue() 를 제공한다.

  • Queue() : 일반적인 큐 자료구조
  • LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조 (like stack)
  • PriorityQueue() : 우선순위 큐 -> 데이터마다 우선순위를 넣어서, 우선수위가 높은 순으로 데이터 출력

1. Queue() 사용하기

import queue

data_queue = queue.Queue()

data_queue.put("abc")
data_queue.put(1)

data_queue.qsize() # 2
data_queue.get() # abc -> 제일 먼저 인서트된 데이터 출력

data_queue.qsize() # 1 -> 9번줄에서 abc가 빠져나갔기 때문
data_qudud.get() # 1 출력

 

2. LifoQueue() 사용하기

import queue

data_queue = queue.LifoQueue()

data_queue.put("abc")
data_queue.put(1)

data_queue.qsize() # 2
data_queue.get() # 1 -> LIFO 구조이기 때문에 1이 먼저 출력

data_queue.qsize() # 1 -> 9번줄에서 1가 빠져나갔기 때문
data_qudud.get() # abc 출력

 

3. PriorityQueue() 사용하기

import queue

data_queue = queue.PriorityQueue()

data_queue.put((10,"abc")) # 우선순위를 표현하기 위해 튜플로 인서트 (우선순위, value)
data_queue.put((5,1))
data_queue.put((15,"ef"))

data_queue.qsize() # 3 -> 데이터는 3개
data_queue.get() # (5,1) -> 우선순위가 가장 높은 데이터 출력

data_queue.qsize() # 2 -> 10번줄에서 (5,1)가 빠져나갔기 때문
data_qudud.get() # (10,"abc") -> 두번째 우선순위