pythonキュー
6719 ワード
Queueはpython標準ライブラリにおけるスレッドセキュリティのキュー(FIFO)実装であり、マルチスレッドプログラミングに適した先進的な先行データ構造を提供する
1.三つの行列の出入り方式:
先入先出、後入先出、優先順位キュー
2.キューの操作
1.入隊
put:putメソッドは、キューのサイズが設定されている場合、キューがいっぱいになってもputがキューに入り続けると、ブロックカードが死んでしまうブロックメソッドです.
2.チームを出る
getメソッド:getメソッドもブロックメソッドであり、キューが空の場合、ブロックされます.
get_Nowaitメソッド:ブロックされませんが、キューが空の場合、エラーが発生します:queue.Empty
3.その他の方法:
待ち行列の処理が完了しました:
キューがいっぱいか空か:
キュー・サイズの表示:
生産者消費者モデル:
1.三つの行列の出入り方式:
先入先出、後入先出、優先順位キュー
# , ,maxsize=0
q0 = queue.Queue(maxsize=2)
# last in first out,
q1 = queue.LifoQueue()
# , , :q2.put(1,'name')
q2 = queue.PriorityQueue()
2.キューの操作
1.入隊
put:putメソッドは、キューのサイズが設定されている場合、キューがいっぱいになってもputがキューに入り続けると、ブロックカードが死んでしまうブロックメソッドです.
q0.put(1) # ;put , , ,
put_nowait: , , :queue.Full
q0.put_nowait(3) # ; ,
2.チームを出る
getメソッド:getメソッドもブロックメソッドであり、キューが空の場合、ブロックされます.
# get , , , , get ,
print(q0.get())
print(q0.get())
get_Nowaitメソッド:ブロックされませんが、キューが空の場合、エラーが発生します:queue.Empty
# , ,
print(q0.get_nowait())
3.その他の方法:
待ち行列の処理が完了しました:
# , , (put ) get (task_done)
q0.join()
#
q0.task_done()
キューがいっぱいか空か:
# , , True
print('Full:',q0.full())
print('Empty:',q0.empty())
キュー・サイズの表示:
#
print(q0.qsize())
生産者消費者モデル:
import time
import threading
import queue
# 10
q = queue.Queue(maxsize=10)
def teacher(name):
for i in range(20):
q.put(1) # , 10, get put
print(f'{name} ')
time.sleep(2)
print('----------- ...------------')
q.join() # , task_done
print(' !')
def studnet(name):
while True:
q.get() # , , ,
print(f'{name} , {q.qsize()}')
time.sleep(5)
q.task_done() # task_done
t = threading.Thread(target=teacher,args=(' ',))
# threading.Timer(time,func,args,kwargs) 。
s = threading.Timer(3,studnet,args=(' ',))
s1 = threading.Timer(3,studnet,args=(' ',))
t.start()
s.start()
s1.start()
, 1
, 0
, 1
, 0
, 2
, 1
, 2
, 1
, 3
, 2
, 3
, 2
, 4
, 3
, 4
, 3
----------- ...------------
, 3
, 2
, 1
, 0
!