Key Ponint 💡 큐의 구조
스택
과 꺼내는 순서가 반대Key Ponint 💡 큐의 용어
Key Ponint 💡 queue 라이브러리에는 다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue() 를 제공.
import queue # queue 라는 라이브러리 사용하기 위해서 import queue
data_queue = queue.Queue() # 라이브러리명.큐 클래스
# 일반적인 FIFO 정책을 쓴 Queue가 만들어진다.
# queue 라이브러리는 함수명 put / get을 사용한다.
# put은 데이터를 삽입
data_queue.put("funcoding")
data_queue.put(1)
# queue의 사이즈를 확인하기 위해서 qsize를 사용
data_queue.qsize() # 2
# get : 꺼내는 함수, get은 별도의 인자를 사용하지 않는다.
data_queue.get() # 맨 먼저 넣어진 데이터가 출력이 된다. = funcoding
data_queue.qsize() # 'funcoding'을 뺴주었기 때문에 qsize()는 1이 된다.
data_queue.get() # 다시 get을 실행하면 다음에 넣어진 데이터가 출력된다. = 1
data_queue.qsize() #'funcoding' 과 '1' 이 queue에서 빠져나온 것을 알 수 있다. = 0
Key Ponint 💡 마지막에 넣은것이 가장 먼저 추출이 된다. = 스택
import queue # queue 라는 라이브러리 사용하기 위해서 import queue
data_Queue = queue.LifoQueue()
data_Queue.put('funcoding')
data_Queue.put(1)
data_Queue.qsize()
data_Queue.get() # 마지막에 넣은것이 가장 먼저 추출이 되므로 1이 출력이 된다.
data_Queue.qsize() # 1이 빠져 나왔기 때문에 qsize는 한 개가 된다.
data_Queue.get() #'funcoding'은 가장 처음에 집어 넣었으므로, 가장 마지막에 출력이 된다.
data_Queue.qsize() # 다 빠져나왔으므로 qsize는 0이다.
Key Ponint 💡 우선순위 큐
- 이 정책은 각각의 데이터를 넣을 때마다
우선수위 번호
를 같이 넣는 것.- 이 안에서 데이터를 추출할 때는 가장 우선순위가 높은 데이터를 추출한다
- 우선순위에 따라 데이터를 추출하는 순서가 달라진다.
import queue
data_PriQueue = queue.PriorityQueue()
# 데이터 삽입
# 데이터를 넣을 때 데이터만 삽입하는 것이 아니라 우선순위도 삽입하여야 한다.
data_PriQueue.put((10,"korea")) # ()는 튜플을 나타내는 기호 (우선순위, "데이터")
data_PriQueue.put((5,1)) # 우선순위는 5번이고 실제 적용되는 데이터는 1
data_PriQueue.put((15, "USA")) # 우선순위는 15번이고 실제 적용되는 데이터는 "USA"
data_PriQueue.qsize() # qsize는 세 개이다.
# 숫자가 낮은것이 먼저 출력된다.
data_PriQueue.get() # 우선순위중 가장 빠른 것은 5번이었던 1이 출력된다.
# (5, 1)
data_PriQueue.get()
# (10, 'korea')
data_PriQueue.get()
# (15, 'USA')
data_PriQueue.qsize() # 모두 다 빠져나왔으므로 qsize는 0이 된다.
Key Ponint 💡 프로세스 스케쥴링 방식
- 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨. (운영체제 참조)
큐의 경우에는 장단점 보다는 (특별히 언급되는 장단점이 없다.) 큐의 활용 예로 프로세스 스케쥴링 방식을 함께 이해해두는 것이 좋다.