일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- terraform
- selenium
- 디자인 패턴
- github actions
- PostgreSQL 설치 시 에러
- 브랜디
- Firefox
- PostgreSQL
- 프로그래머스 코딩 테스트 연습
- 프로그래머스 월간 코드 챌린지 시즌1
- pycharm
- heroku
- 파이썬
- Codeforces
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 애드센스
- 클린 코드
- Spring Boot
- github
- 프로그래머스 코딩테스트 연습문제
- 스코페2021
- 바이오데이터 엔지니어
- 프로그래머스 코딩테스트 연습
- 프로그래머스 월간 코드 챌린지
- git
- Word Cloud
- c#
- WPF
- Python
- FastAPI
- Today
- Total
프로그래밍 연습하기
파이썬 PriorityQueue(우선순위 큐) 본문
docs.python.org/3/library/queue.html
queue — A synchronized queue class — Python 3.8.5 documentation
queue — A synchronized queue class Source code: Lib/queue.py The queue module implements multi-producer, multi-consumer queues. It is especially useful in threaded programming when information must be exchanged safely between multiple threads. The Queue
docs.python.org
파이썬 PriorityQueue(우선순위 큐)를 사용해보면서 알게된 것을 정리해보려고 합니다.
우선순위 큐를 구성하고 나서,
내용을 확인하고 싶을 때가 있습니다.
그래서 이런식으로 확인 해봅니다.
>>> p_q = queue.PriorityQueue()
>>> p_q
<queue.PriorityQueue object at 0x03A2B8B0>
>>> print(p_q)
<queue.PriorityQueue object at 0x03A2B8B0>
>>> list(p_q)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
list(p_q)
TypeError: 'PriorityQueue' object is not iterable
하지만 메모리 주소값이 나오고 iterable 하지 않아서 list로 만들어 볼 수도 없습니다.
이때 인스턴스 변수 queue를 사용해서 내부를 확인할 수 있습니다.
>>> p_q = queue.PriorityQueue()
>>> p_q.put(1)
>>> p_q.put(2)
>>> p_q.put(3)
>>> p_q.queue
[1, 2, 3]
이 queue는 내부적으로 heapq 모듈을 사용하여 구현한 것이기 때문에
자세하게 알고 싶으시다면 heapq 모듈 관련한 문서를 찾아보시면 도움이 될 것 같습니다.
그리고 비어있는 PriorityQueue에 get()을 했을 때, 계속 대기하게 됩니다.
대기하지 않으려면 get_nowait()을 사용해야 합니다.
아니면 get()을 사용하기 전에 비어있는지 검사를 하여
비어있지 않을 때만 get()을 사용할 수도 있을 것 같습니다.
PriorityQueue는 비어있을 때도 True이기 때문에
비어있는 것을 확인하기 위해서는
if queue: #비어 있어도 True
if queue.empty(): #비어 있을 때만 True
이렇게 empty()를 통해 확인해주어야 합니다.
PriorityQueue 뿐만 아니고 queue 라이브러리에도 해당되는 내용들입니다.
우선순위 큐는 우선순위를 구현하기 위해 heapq를 사용했지만
기본 Queue는 deque를 사용하는 등의 차이점이 있습니다.
github.com/python/cpython/blob/3.9/Lib/queue.py
python/cpython
The Python programming language. Contribute to python/cpython development by creating an account on GitHub.
github.com
여기에서 직접 구현을 확인해보실 수도 있습니다.
'Python' 카테고리의 다른 글
Openpyxl 하이퍼링크 넣기 (0) | 2020.09.29 |
---|---|
파이썬 데코레이터를 이용한 실행 시간 측정 (0) | 2020.09.17 |
초(Second)를 날짜(Date)로 바꾸기 (0) | 2020.07.31 |
워드 클라우드 프로젝트 (0) | 2020.07.21 |
고성능 파이썬(High Performance Python)을 읽고 (0) | 2019.11.18 |