python 實現生產者消費者模型

2022-04-10 13:12:18 字數 1864 閱讀 2181

生產者消費者:包子鋪不停的做包子,行人不停的買 ---> 這樣就達到了目的--->包子的銷售 

兩個不同的角色 包子鋪,行人 只負責單一操作 讓包子變成連線的介質.

1

#_*_coding:utf-8_*_

2from threading import

thread

3from queue import

queue

4import

time

5class

procuder(thread):

6def

__init__

(self,name,queue):

7 self.__name =name

8 self.__queue =queue

9 super(procuder,self).__init__

()10

defrun(self):

11while 1:

12if self.__queue

.full():

13 time.sleep(3)

14else

:15 time.sleep(1)

16 self.__queue.put('

**star**')

17print

'-->%s plus a star

' % self.__name

18class

cunsumer(thread):

19def

__init__

(self,name,queue):

20 self.__name =name

21 self.__queue =queue

22 super(cunsumer,self).__init__

()23

defrun(self):

24while 1:

25if self.__queue

.empty():

26 time.sleep(3)

27else

:28 time.sleep(1)

29 self.__queue

.get()

30print

'-->%s get a star

' % self.__name

31 maxque = queue(maxsize=50)

3233 p1 = procuder('p1'

,maxque)

34p1.start()

35 p2 = procuder('p2'

,maxque)

36p2.start()

37 p3 = procuder('p3'

,maxque)

38p3.start()

39for i in range(20):

40print

'_________________

'41 temp =cunsumer(i,maxque)

42 temp.start()

於是問題來了 --->為什麼我們需要這個模型?

1解耦:核心就是把生產者和消費者兩個物件關係變得不緊密了

2緩衝:如果你是快遞員,送一棟人很多的樓,你覺得是乙個個的送,還是送到前台,發個簡訊讓他們自己來拿好呢?

3防止阻塞:還是上面的例子,如果你是乙個個的送 那麼如果有個人 30分鐘才會取 你是不是要等30分鐘呢?

redis stream 實現生產者消費者模式

test public void producer throws interruptedexception test public void consumer1 throws interruptedexception list msg jedis.xreadgroup groupname,consu...

python 生產者 消費者

from bs4 import beautifulsoup import requests import time import multiprocessing as mp import re from multiprocessing import queue from multiprocessin...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...