zoukankan      html  css  js  c++  java
  • 队列Queue的get方法

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

     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')
  • 相关阅读:
    suse linux编译安装GCC报错
    suse linux 编译安装Apache时报“APR NOT FOUND”的解决方法
    LoadRunner监控Windows和Linux常见问题
    LR报-27727错误解决办法
    主机在virtualbox在NAT方式SSH访问
    清除hao123浏览器劫持小尾巴病毒
    在CentOS上,Servlet出现java.lang.NoClassDefFoundError
    构建第一个SSH的maven项目
    关于Oracle数据库sys用户登入的解惑
    ip route-static 命令的参数
  • 原文地址:https://www.cnblogs.com/linga/p/9400401.html
Copyright © 2011-2022 走看看