pythonマルチスレッドキューセキュリティ
これは古典的な「生産者消費者」の例です.
python queueモジュールには3つのキューがあります.1、python queueモジュールのFIFOキューが先に出ます.2、LIFOはスタックに似ています.すなわち先に進んで後に出る.3、優先順位キューレベルが低いほど先に出るものもあります.
この3つのキューにはそれぞれ3つの構造関数がある:1、class Queue.Queue(maxsize) FIFO 2、class Queue.LifoQueue(maxsize) LIFO 3、class Queue.PriorityQueue(maxsize)優先キュー
このパッケージの一般的な方法を説明します.
Queue.qsize()はキューのサイズQueueを返す.Empty()キューが空の場合はTrueを返し、逆にFalse Queueを返します.フル()キューがいっぱいになったらTrueを返し、逆にFalseQueueを返します.fullはmaxsizeサイズに対応するQueue.get([block[,timeout]))取得キュー,timeout待ち時間Queue.get_相当な量だget(False)非ブロックQueue.put(item)書き込みキュー、timeout待ち時間Queue.put_nowait(item)相当Queue.put(item, False)Queue.task_done()は仕事を終えた後、Queue.task_done()関数はタスクが完了したキューに信号Queueを送信する.join()は、実際にはキューが空になるまで待ってから別の操作を実行することを意味します.
コード:
python queueモジュールには3つのキューがあります.1、python queueモジュールのFIFOキューが先に出ます.2、LIFOはスタックに似ています.すなわち先に進んで後に出る.3、優先順位キューレベルが低いほど先に出るものもあります.
この3つのキューにはそれぞれ3つの構造関数がある:1、class Queue.Queue(maxsize) FIFO 2、class Queue.LifoQueue(maxsize) LIFO 3、class Queue.PriorityQueue(maxsize)優先キュー
このパッケージの一般的な方法を説明します.
Queue.qsize()はキューのサイズQueueを返す.Empty()キューが空の場合はTrueを返し、逆にFalse Queueを返します.フル()キューがいっぱいになったらTrueを返し、逆にFalseQueueを返します.fullはmaxsizeサイズに対応するQueue.get([block[,timeout]))取得キュー,timeout待ち時間Queue.get_相当な量だget(False)非ブロックQueue.put(item)書き込みキュー、timeout待ち時間Queue.put_nowait(item)相当Queue.put(item, False)Queue.task_done()は仕事を終えた後、Queue.task_done()関数はタスクが完了したキューに信号Queueを送信する.join()は、実際にはキューが空になるまで待ってから別の操作を実行することを意味します.
コード:
#!/home/oracle/dbapython/bin/python
#encoding=utf-8
import threading
import time
from Queue import Queue
class Producer(threading.Thread):
def run(self):
global queue
count = 0
while True:
for i in range(100):
if queue.qsize() > 1000:
pass
else:
count = count +1
msg = ' '+str(count)
queue.put(msg)
print msg
time.sleep(1)
class Consumer(threading.Thread):
def run(self):
global queue
while True:
for i in range(3):
if queue.qsize() < 50:
pass
else:
msg = self.name + ' '+queue.get()
print msg
time.sleep(1)
queue = Queue()
def test():
for i in range(100):
msg=' '+str(i)
print msg
queue.put(msg)
for i in range(2):
p = Producer()
p.start()
for i in range(5):
c = Consumer()
c.start()
if __name__ == '__main__':
test()