zoukankan      html  css  js  c++  java
  • 【Python@Thread】queue模块-生产者消费者问题

    python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据。

    个人感觉queue就是管程的概念

    一个生产者消费者问题

     1 from random import randint
     2 from threading import Thread
     3 from queue import Queue
     4 from time import sleep
     5 
     6 
     7 def writeq(queue):
     8     print('starting put queue...')
     9     queue.put('hahaha', 1)          #1表示在有可用空间前,阻塞
    10     print('size now', queue.qsize())
    11 
    12 
    13 def readq(queue):
    14     print('starting get queue...')
    15     val = queue.get(1)              #1表示在有可用元素前阻塞
    16     print('consume from queu...size now', queue.qsize())
    17 
    18 
    19 def writer(queue, loops):
    20     for i in range(loops):
    21         writeq(queue)
    22         sleep(randint(1, 3))
    23 
    24 
    25 def reader(queue, loops):
    26     for i in range(loops):
    27         readq(queue)
    28         sleep(randint(2, 5))
    29 
    30 
    31 funcs = [writer, reader]
    32 
    33 
    34 def main():
    35     nloops = randint(2, 5)
    36     q = Queue(32)
    37 
    38     threads = []
    39     for i in range(len(funcs)):
    40         t = Thread(target=funcs[i], args=(q, nloops))
    41         threads.append(t)
    42 
    43     for i in range(len(funcs)):
    44         threads[i].start()
    45 
    46     for i in range(len(funcs)):
    47         threads[i].join()
    48 
    49     print('all done')
    50 
    51 if __name__ == '__main__':
    52     main()

    输出结果:

  • 相关阅读:
    程序格式
    java数据类型
    java-helloworld
    原生字符串
    字符串常见操作19个操作
    字符串函数操作
    【字符串切片操作和range函数用法】
    【字符串拼接之两种方法】
    C#中ref和out的区别使用
    c语言内部函数、外部函数多文件编译总结(vs2015编译环境)
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6209476.html
Copyright © 2011-2022 走看看