반응형
지난 번 포스팅을 통해서,
walkaroundthedevelop.tistory.com/54
queue 와 deque에 대해서 알아보았습니다.
multithreading을 하는데에, queue를 자주 쓰는데, 그 방법에 대해서 알아봅시다.
출처 : www.troyfawkes.com/learn-python-multithreading-queues-basics/
my_queue = Queue(maxsize=0)
my_queue.put(1)
my_queue.put(2)
my_queue.put(3)
print my_queue.get()
my_queue.task_done()
# Outputs: 1
여기서 task_done()은 나중에 join() 함수를 위해서 필요합니다.
관련 포스팅 : stackoverflow.com/questions/49637086/python-what-is-queue-task-done-used-for
from Queue import Queue
def do_stuff(q):
while not q.empty():
print q.get()
q.task_done()
q = Queue(maxsize=0)
for x in range(20):
q.put(x)
do_stuff(q)
위 코드에서 max_size = 0은 limit이 없는 걸 의미합니다.
그럼 이제 본격적으로 threading을 넣어 보겠습니다.
from Queue import Queue
from threading import Thread
def do_stuff(q):
while True:
print q.get()
q.task_done()
q = Queue(maxsize=0)
num_threads = 10
for i in range(num_threads):
worker = Thread(target=do_stuff, args=(q,))
worker.setDaemon(True)
worker.start()
for x in range(100):
q.put(x)
q.join()
보면, 새로운 함수로 setDaemon이 들어간 걸 볼 수 있습니다.
setDaemon이란 deaemon thread를 만들수 있는 걸 말하며,
daemon thread란 main thread를 kill 해도 별다른 무리없이 kill 되는 thread들을 의미합니다.
출처: www.bogotobogo.com/python/Multithread/python_multithreading_Daemon_join_method_threads.php
반응형
'Python > Concurrency' 카테고리의 다른 글
Python Multiprocessing - 멀티프로세싱 (0) | 2020.10.30 |
---|---|
Python Multithreading and Multiprocessing - Multithreading (0) | 2020.10.30 |
Python Threading과 multiprocessing (0) | 2020.10.21 |