Thread에서 사용한 Python Queue 간단한 예제Python/Python - 스레드&프로세스2023. 10. 7. 06:57
Table of Contents
반응형
하나의 스레드에서 큐에 데이터를 넣고 다른 쓰레드에서 큐에서 데이터를 꺼내는 간단한 예제 코드입니다.
아래 링크를 참고했습니다.
https://docs.python.org/3/library/queue.html
2022. 09. 03 최초작성
2023. 01. 21 큐 모듈 변경.
import threading from multiprocessing import Queue def producer(): count = 0 while True: lock.acquire() # 전역 변수 접근을 금지합니다. if not q.full(): # 큐가 꽉차지 않았다면 count = count +1 q.put_nowait(count) # 큐에 데이터를 넣습니다. print(f'push item {count}') lock.release() # 이제 전역 변수 접근을 할 수 있습니다. if count == 10: break print('thread 1 exit') def consumer(): while True: # acquire 대신에 with를 사용하면 release를 적을 필요가 없습니다. with lock: # 전역 변수 접근을 금지합니다. if not q.empty(): # 큐가 비어있지 않다면 item = q.get_nowait() # 큐에서 데이터를 꺼냅니다. print(f'get item {item}') if item == 10: break print('thread 2 exit') # 큐의 최대 크기는 3입니다. q = Queue(3) lock = threading.Lock() # 뮤텍스 객체를 전역으로 선언하여 스레드간에 공유하도록 합니다. t1 = threading.Thread(target=producer) # 큐에 데이터를 넣는 스레드입니다. t1.start() t2 = threading.Thread(target=consumer) # 큐에서 데이터를 꺼내는 스레드입니다. t2.start() # 스레드가 종료하기를 대기합니다. t1.join() t2.join() print('main exit') |
실행 결과입니다.
한 스레드에서 데이터를 큐에 넣고(push item) 다른 스레드에서 큐에서 데이터를 꺼내고(get item) 있습니다. 아래 결과에선 큐에 넣고 큐에서 꺼내는게 데이터 3개씩 번갈아 가면 발생하지만 스레드라서 이렇게 동작하지 않을 수도 있습니다.
반응형
'Python > Python - 스레드&프로세스' 카테고리의 다른 글
Python Thread 예제 (0) | 2023.10.21 |
---|---|
스레드가 죽었는지 확인하는 Python 예제 코드 (0) | 2023.10.14 |
Python에서 자식 Process 죽었는지 확인하는 예제 코드 (0) | 2023.10.12 |
Python에서 자식 Process ID 확인하는 예제 코드 (0) | 2023.10.12 |
파이썬에서 실행중인 스레드 이름 출력하기 (0) | 2022.08.06 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!