码迷,mamicode.com
首页 > 其他好文 > 详细

队列Queue的get方法

时间:2018-08-01 14:26:37      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:排错   target   while   print   逻辑   and   __name__   nbsp   time   

写了一段生产者消费者模型的代码:

 1 from time import sleep
 2 from random import randint, random
 3 from multiprocessing import Process, Queue
 4 
 5 
 6 def consumer(q, name):
 7     while 1:
 8         if q.get() == stop and q.qsize() == 0:
 9             break
10         food = q.get()
11         print(%s 吃了 %s % (name, food))
12         sleep(randint(1, 3))
13 
14 
15 def producer(q, name, food):
16     for i in range(10):
17         sleep(random())
18         foo = food + str(i)
19         print("%s 拉了一坨 %s" % (name, foo))
20         q.put(foo)
21 
22 
23 if __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()
29     p1.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
 2 from random import randint, random
 3 from multiprocessing import Process, Queue
 4 
 5 
 6 def consumer(q, name):
 7     while 1:
 8         food = q.get()
 9         if food == stop:
10             break
11         print(%s 吃了 %s % (name, food))
12         sleep(randint(1, 3))
13 
14 
15 def producer(q, name, food):
16     for i in range(10):
17         sleep(random())
18         foo = food + str(i)
19         print("%s 拉了一坨 %s" % (name, foo))
20         q.put(foo)
21 
22 
23 if __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()
29     p1.join()
30     q.put(stop)

 

队列Queue的get方法

标签:排错   target   while   print   逻辑   and   __name__   nbsp   time   

原文地址:https://www.cnblogs.com/linga/p/9400401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!