Python/Concurrency

Python 멀티쓰레딩 Queue를 사용해 봅시다

jinmc 2021. 3. 30. 22:01
반응형

지난 번 포스팅을 통해서, 

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

 

반응형