python 生產者消費者模式

專注的阿熊發表於2021-09-06

import threading

import queue

import time

# 定義一個生產者

def producer():

     count = 0

     # 判斷佇列中任務的數量

     while q.qsize()<5:

         print(' %s 頓飯 ......',count)

         q.put(count)

         count+=1

         time.sleep(1)

# 定義一個消費者

def consumer(name):

     while True:

         print("%s 吃了第 %s " % (name,q.get()))

# 定義一個佇列

q = queue.Queue(maxsize=4)

t1 = threading.Thread(target=producer)

t2 = threading.Thread(target=consumer,args=('jibu',))

t1.start()

t2.start()

結果 :

%s 頓飯 ...... 0

jibu 吃了第 0

%s 頓飯 ...... 1

jibu 吃了第 1

%s 頓飯 ...... 2

jibu 吃了第 2

%s 頓飯 ...... 3

jibu 吃了第 3

%s 頓飯 ...... 4

jibu 吃了第 4

%s 頓飯 ...... 5

jibu 吃了第 5

%s 頓飯 ...... 6

jibu 吃了第 6

%s 頓飯 ...... 7

jibu 吃了第 7

%s 頓飯 ...... 8

# 另外,外匯跟單gendan5.com如果供大於求或者求大於供,可以在相對小的一方在增加執行緒的數量

當然如果需要進一步最佳化可以讓消費者執行完佇列中所有任務的時候告訴生產者一聲

import threading

import queue

import time

# 定義一個生產者

def producer():

     count = 0

     # 判斷佇列中任務的數量

     for i in range(5):

         print(' %s 頓飯 ......',count)

         q.put(count)

         count+=1

         time.sleep(1)

     q.join()

# 定義一個消費者

def consumer(name):

     while True:

         print("%s 吃了第 %s " % (name,q.get()))

         q.task_done()

         print(' 消費者執行完了所有任務 ')

# 定義一個佇列

q = queue.Queue(maxsize=4)

t1 = threading.Thread(target=producer)

t2 = threading.Thread(target=consumer,args=('jibu',))

t1.start()

t2.start()

結果

0 頓飯 ......

jibu 吃了第 0

消費者執行完了所有任務

1 頓飯 ......

jibu 吃了第 1

消費者執行完了所有任務

2 頓飯 ......

jibu 吃了第 2

消費者執行完了所有任務

3 頓飯 ......

jibu 吃了第 3

消費者執行完了所有任務

4 頓飯 ......

jibu 吃了第 4

消費者執行完了所有任務


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2790651/,如需轉載,請註明出處,否則將追究法律責任。

相關文章