Python如何模拟实现生产者消费者模式的代码案例


本文摘自php中文网,作者ringa_lee,侵删。

这篇文章主要介绍了详解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如何模拟实现生产者消费者模式的代码案例的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python编程语言是什么

Python需要英语基础吗

turtle.done()的作用是什么

Python工作岗位有哪些

Python什么时候用多进程编程

Python的len函数什么意思

如何用Python计算圆周率?

Python怎么输入中文

Python如何查找字符串的长度?(代码示例)

Python input是什么意思

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...