佇列Queue的get方法

2022-06-30 20:45:15 字數 2425 閱讀 1702

寫了一段生產者消費者模型的**:

1

from time import

sleep

2from random import

randint, random

3from multiprocessing import

process, queue45

6def

consumer(q, name):

7while 1:

8if q.get() == '

stop

'and q.qsize() ==0:

9break

10 food =q.get()

11print('

%s 吃了 %s

' %(name, food))

12 sleep(randint(1, 3))

1314

15def

producer(q, name, food):

16for i in range(10):

17sleep(random())

18 foo = food +str(i)

19print("

%s 拉了一坨 %s

" %(name, foo))

20q.put(foo)

2122

23if

__name__ == '

__main__':

24 q = queue(10)

25 c = process(target=consumer, args=(q, "老狗"

))26

c.start()

27 p1 = process(target=producer, args=(q, '

峰哥', '粑粑'

))28

p1.start()

29p1.join()

30 q.put('

stop

')

這段**執行的結果是:

1

峰哥 拉了一坨 粑粑0

2峰哥 拉了一坨 粑粑1

3老狗 吃了 粑粑1

4峰哥 拉了一坨 粑粑2

5峰哥 拉了一坨 粑粑3

6峰哥 拉了一坨 粑粑4

7老狗 吃了 粑粑3

8峰哥 拉了一坨 粑粑5

9老狗 吃了 粑粑5

10峰哥 拉了一坨 粑粑6

11峰哥 拉了一坨 粑粑7

12老狗 吃了 粑粑7

13峰哥 拉了一坨 粑粑8

14峰哥 拉了一坨 粑粑9

15 老狗 吃了 粑粑9

發現只列印了奇數的產品,排錯發現是邏輯出錯了,應該先用food先從佇列裡面get,然後去判斷,而上面這段**的問題出在每次if判斷從佇列裡面拿出來了乙個導致的

下面是修改後的**:

1

from time import

sleep

2from random import

randint, random

3from multiprocessing import

process, queue45

6def

consumer(q, name):

7while 1:

8 food =q.get()

9if food == '

stop':

10break

11print('

%s 吃了 %s

' %(name, food))

12 sleep(randint(1, 3))

1314

15def

producer(q, name, food):

16for i in range(10):

17sleep(random())

18 foo = food +str(i)

19print("

%s 拉了一坨 %s

" %(name, foo))

20q.put(foo)

2122

23if

__name__ == '

__main__':

24 q = queue(10)

25 c = process(target=consumer, args=(q, "老狗"

))26

c.start()

27 p1 = process(target=producer, args=(q, '

峰哥', '粑粑'

))28

p1.start()

29p1.join()

30 q.put('

stop

')

queue的長度 佇列 Queue

佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。隊結構 迴圈佇列可以更簡單防止偽溢位 假溢位 的發生,但佇列大小是固定的。防止假溢位,如d...

佇列Queue的實現

佇列 先進先出 兩種實現方式 1.利用陣列 2.鏈式儲存 需要兩個變數指向隊頭front和隊尾rear,當入隊時,隊尾後移 出隊時,隊頭後移 使用陣列實現,當我們入隊至陣列滿,然後出隊至陣列空,此時雖然陣列為空,但是卻不能再入隊了,因為隊尾rear已經指向了陣列的最後乙個索引位置。那麼如何充分利用陣...

佇列Queue的應用

c 中queue是乙個先進先出的佇列,能有效地模擬排隊問題。c 佇列queue類成員函式如下 back 返回最後乙個元素 empty 如果佇列空則返回真 front 返回第乙個元素 pop 刪除第乙個元素 push 在末尾加入乙個元素 size 返回佇列中元素的個數.定義queue queueq1 ...