一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Python 模擬實現生產者消費者模式的實例

詳解Python 模擬實現生產者消費者模式的實例

2020-12-01 00:28qindongliang1922 Python

這篇文章主要介紹了詳解Python 模擬實現生產者消費者模式的實例的相關資料,這里使用了線程知識,隊列知識及循環的知識,需要的朋友可以參考下

詳解Python 模擬實現生產者消費者模式的實例

散仙使用python3.4模擬實現的一個生產者與消費者的例子,用到的知識有線程,隊列,循環等,源碼如下:

Python代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import queue
import time
import threading
import random
 
 
q=queue.Queue(5)
 
#生產者
def pr():
  name=threading.current_thread().getName()
  print(name+"線程啟動......")
  for i in range(100):
    t=random.randint(2,9)
    print(name,"睡眠時間: ",t)
    time.sleep(t);
    d="A"+str(i)
    print(name+"正在存第",i+1,"個數據: ",d)
    #q.put("A"+str(i),False,2000)
    q.put(d)
  print("生產完畢!")
 
 
#消費者
def co():
  name=threading.current_thread().getName()
  time.sleep(1)
  print(name+"線程啟動......")
 
  while True:
    print(name+"檢測到隊列數量: ",q.qsize())
    t=random.randint(2,9)
    print(name,"睡眠時間: ",t)
    data=q.get();
    print(name+"消費一個數據: ",data)
 
 
 
 
p=threading.Thread(target=pr,name="生產者")
c=threading.Thread(target=co,name="消費者1")
c2=threading.Thread(target=co,name="消費者2")
 
p.start()
c.start()
c2.start()

在本例里面散仙啟動了1個生產者線程,2個消費者線程,打印效果如下:

Python代碼 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
生產者線程啟動......
生產者 睡眠時間: 4
消費者1線程啟動......
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 2
消費者2線程啟動......
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 3
生產者正在存第 1 個數據: A0
生產者 睡眠時間: 9
消費者1消費一個數據: A0
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 8
生產者正在存第 2 個數據: A1
生產者 睡眠時間: 5
消費者2消費一個數據: A1
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 7
生產者正在存第 3 個數據: A2
生產者 睡眠時間: 8
消費者1消費一個數據: A2
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 2
生產者正在存第 4 個數據: A3
生產者 睡眠時間: 7
消費者2消費一個數據: A3
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 9
生產者正在存第 5 個數據: A4
生產者 睡眠時間: 2
消費者1消費一個數據: A4
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 5
生產者正在存第 6 個數據: A5
生產者 睡眠時間: 5
消費者2消費一個數據: A5
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 6
生產者正在存第 7 個數據: A6
生產者 睡眠時間: 7
消費者1消費一個數據: A6
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 7
生產者正在存第 8 個數據: A7
生產者 睡眠時間: 3
消費者2消費一個數據: A7
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 8
生產者正在存第 9 個數據: A8
生產者 睡眠時間: 2
消費者1消費一個數據: A8
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 4
生產者正在存第 10 個數據: A9
生產者 睡眠時間: 4
消費者2消費一個數據: A9
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 5
生產者正在存第 11 個數據: A10
生產者 睡眠時間: 2
消費者1消費一個數據: A10
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 3
生產者正在存第 12 個數據: A11
生產者 睡眠時間: 3
消費者2消費一個數據: A11
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 3
生產者正在存第 13 個數據: A12
生產者 睡眠時間: 3
消費者1消費一個數據: A12
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 3
生產者正在存第 14 個數據: A13
生產者 睡眠時間: 8
消費者2消費一個數據: A13
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 7
生產者正在存第 15 個數據: A14
生產者 睡眠時間: 3
消費者1消費一個數據: A14
消費者1檢測到隊列數量: 0
消費者1 睡眠時間: 7
生產者正在存第 16 個數據: A15
生產者 睡眠時間: 2
消費者2消費一個數據: A15
消費者2檢測到隊列數量: 0
消費者2 睡眠時間: 9

從這個例子中,我們發現利用隊列,來做同步時非常簡單方便的,除此之外隊列,還有如下幾個方便的方法:

介紹一下此包中的常用方法:   

?
1
2
3
4
5
6
7
8
9
10
Queue.qsize() 返回隊列的大小 
Queue.empty() 如果隊列為空,返回True,反之False
Queue.full() 如果隊列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應 
Queue.get([block[, timeout]])獲取隊列,timeout等待時間 
Queue.get_nowait() 相當Queue.get(False)
非阻塞 Queue.put(item) 寫入隊列,timeout等待時間 
Queue.put_nowait(item) 相當Queue.put(item, False)
Queue.task_done() 在完成一項工作之后,Queue.task_done()函數向任務已經完成的隊列發送一個信號
Queue.join() 實際上意味著等到隊列為空,再執行別的操作

以上就是詳解Python 模擬實現生產者消費者模式的實例,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://qindongliang.iteye.com/blog/2115950

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好妈妈7在线观看高清 | 和日本免费不卡在线v | 五月天精品视频播放在线观看 | 99久久综合精品免费 | 大jjjj免费看视频 | 国产精品videosse | 国产成人理在线观看视频 | 美女被扒开屁股进去网 | 69堂最新地域网名 | 国产99视频精品免视看9 | 国产成人精品午夜在线播放 | 亚洲国产成人久久综合一区77 | 国产成人综合视频 | 美女尿口照片 | 桃色视频破解版 | 亚洲精品色婷婷在线影院麻豆 | 久久99r66热这里有精品 | 3d动漫美女被吸乳羞羞视频 | 欧美色阁 | 精品图区| 奇米影视在线观看 | 国产精品片 | 无人区1免费完整观看 | 91短视频在线播放 | 免费一级特黄特色大片∵黄 | 操女人的b| 五月激情丁香婷婷综合第九 | 国产视频分类 | 国产自一区| 亚洲AV无码国产精品色在线看 | 91久久偷偷做嫩草影院免费看 | 日韩一区二区在线视频 | 欧美成人aa久久狼窝动画 | 91九色视频无限观看免费 | 97自拍视频在线观看 | futa百合高肉全h | 第一次不是你高清在线观看 | 欧美巨吊 | 国产精品密播放国产免费看 | 午夜福利在线观看6080 | 4444亚洲国产成人精品 |