pythonキュー

6719 ワード

Queueはpython標準ライブラリにおけるスレッドセキュリティのキュー(FIFO)実装であり、マルチスレッドプログラミングに適した先進的な先行データ構造を提供する
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

    !