zoukankan      html  css  js  c++  java
  • day52-线程-队列

    #1、线程的队列是使用import queue,如果使用from threading import Queue会报错,因为threading模块没有Queue。
    #也就是说,线程队列Queue是在queue模块里面,不在threading模块里面。
    import queue
    q = queue.Queue()
    q.put(1)
    print(q.get())
    
    #2、LifoQueue:后进先出队列
    import queue
    q = queue.LifoQueue()
    q.put(1)
    q.put(2)
    q.put(3)
    print(q.get())
    print(q.get())
    print(q.get())
    # 3
    # 2
    # 1
    
    #3、PriorityQueue:优先级队列:值越小越优先,值相同就先进先出。
    import queue
    q = queue.PriorityQueue()
    q.put((3,'c'))
    q.put((1,'a'))
    q.put((1,'b'))
    q.put((4,'d'))
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    # (1, 'a')
    # (1, 'b')
    # (3, 'c')
    # (4, 'd')
    
    #生产者和消费者模型:
    # 4、queue模块里面有Queue这个类,Queue里面有task_done和join方法。
    # 通过下列方法让消费者线程结束:
    # 因为生产者put100个包子,而消费者get100个包子之后,消费者就吃完包子了,通过q.task_done()发信号给-->生产者,
    # q.join()接收信号之后不再阻塞,生产者线程结束-->
    # -->接着主线程t1.join()的意思是主线程随着生产者t1子线程的结束而结束-->最后消费者守护线程t2.setDaemon(True)随着主线程的结束而结束。 import queue from threading import Thread import time def producer(q): for i in range(100): q.put('包子%s' % i) q.join() def consumer(q, i): while True: print('消费者%s吃到%s' % (i, q.get())) q.task_done() q = queue.Queue(10) t1 = Thread(target=producer, args=(q,)) t1.start() for i in range(5): t2 = Thread(target=consumer, args=(q, i)) t2.setDaemon(True) t2.start() t1.join() #task_done方法在进程multiprocessing模块的JoinableQueue类里面,在线程queue模块的Queue类里面。
  • 相关阅读:
    【2017下长沙学院软工3班_助教博客】 第一次作业成绩公示
    《构建之法》读书笔记第3章
    《构建之法》读书笔记第1、2章
    【2017下集美大学软件工程1413软工实践_助教博客】 第0次作业成绩公示
    软件工程——构建之法高分Tips
    第09组 Alpha冲刺(1/6)
    2019 SDN上机第2次作业
    第09组 团队Git现场编程实战
    2019 SDN上机第一次作业
    第09组 团队项目-需求分析报告
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12142809.html
Copyright © 2011-2022 走看看