from queue import Queue
# 혹은
import queue
pop(0)
, insert(0,x)
의 시간복잡도는 임!! (충격적이게도..?)queue.Queue([maxsize=N])
from queue import Queue
Q=Queue()
혹은
import queue
Q=queue.Queue(maxsize=10)
block=True, timeout=None
시, put을 하면, free slot이 생길 때 까지 block된다.from queue import Queue
if __name__ == '__main__':
Q=Queue
Q.put(5)
----
import queue
if __name__=='__main__':
Q=queue.Queue()
Q.put(5)
from queue import Queue
if __name__ == '__main__':
Q=Queue(1)
Q.put(1)
Q.put(2) # 여기서 Q가 free slot이 생길 때 까지 블록됨
-----
import queue
Q=queue.Queue(1)
Q.put(1)
Q.put(2) # block!
from queue import Queue
if __name__ == '__main__':
Q=Queue(1)
Q.put(1)
Q.put(2,block=False) # 여기서 queue.Full Exception 발생
-----
import queue
Q=queue.Queue(1)
Q.put(1)
try:
Q.put(2, block=False)
except queue.Full:
print("Queue is full!")
Queue.put(item, Timeout=False)
와 같다.block=True, timeout=None
시, get을 하면, return slot이 생길 때 까지 block된다.from queue import Queue
if __name__ == '__main__':
Q=Queue
Q.put(5)
print(Q.get())
# ==== 출력 ==== #
5
-------
import queue
Q=Queue
Q.put(1)
try:
Q.get(block=True)
except queue.Empty:
print("Empty!")
Queue.get(False)
와 같다.import queue
Q=queue.Queue(maxsize=1)
try:
item=Q.get_nowait() # 아무 것도 없는데 get을 하면 원래 block! 인데, nowait()이라 바로 익셉션
except queue.Empty:
print("Queue is empty")
else:
print(item)
# ==== 출력 ==== #
Queue is empty
Queue.empty()
Queue.full()
Queue.task_done()
join()이 블로킹 중이면, 모든 항목이 처리되면 (큐로 put()된 모든 항목에 대해 task_Done() 호출이 수신되었음을 뜻함) 재개된다.
큐에 있는 항목보다 더 많이 호출되면 ValueError 를 발생시킨다.
큐의 모든 항목을 꺼내서 처리할 때까지 블록한다.
완료되지 않은 작업 카운트는 항목이 큐에 추가될 때마다 올라간다.
consumer thread가 task_done() 을 호출해서 항목을 꺼내고 작업이 모두 완료되었음을 나태낼 때마다 카운트가 내려간다.
완료되지 않은 작업 카운트가 0으로 떨어지면, join()은 블록 해제된다.
def worker():
while True:
item=q.get()
if item is None:
break
do_work(item)
q.task_done()
q=queue.Queue()
threads=[]
for i in range(num_worker_threads):
t=threading.Thread(target=worker)
t.start
threads.append(t)
for item in source():
q.put(item)
q.join()
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
queue
를 사용할 것인데...'00' pop, '01' pop
인데, '01' '01'
만 Pop된다.