zoukankan      html  css  js  c++  java
  • Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)

    Python之路,进程、线程、协程篇

    本节内容

    1. 进程、与线程区别
    2. cpu运行原理
    3. python GIL全局解释器锁
    4. 线程
      1. 语法
      2. join
      3. 线程锁之LockRlock信号量
      4. 将线程变为守护进程
      5. Event事件 
      6. queue队列
      7. 生产者消费者模型
      8. Queue队列
      9. 开发一个线程池
    5. 进程
      1. 语法
      2. 进程间通讯
      3. 进程池 

    参考链接http://www.cnblogs.com/alex3714/articles/5230609.html

    生产者消费者模型

    实例演示

    #生产者消费者模型
    
    import threading,queue
    import time
    
    def consumer(n):  #消费者
        while True:
            print("33[32;1mconsumer[%s]33[0m get task: %s"%(n,q.get()))
            time.sleep(1)
            q.task_done()#通知队列
    
    def producer(n):#生产者
        count=1#计数器
        while True:
            # for i in range(2):
            # time.sleep(1)
            #if q.qsize()<3:#小于3个包子,为了检测判断不要生产的太多
            print("prodcer [%s] produced a new task:%s"%(n,count))
            q.put(count)
            count +=1#计数器
            q.join()#queue is empty,阻塞,等待队列通知(没有包子时会通知)
            print("all task has been cosumed by consumers...")
    
    q=queue.Queue()
    
    c1=threading.Thread(target=consumer,args=[1,])
    c2=threading.Thread(target=consumer,args=[2,])
    c3=threading.Thread(target=consumer,args=[3,])
    p=threading.Thread(target=producer,args=["XiaoYu",])
    p2=threading.Thread(target=producer,args=["Jack",])
    # p3=threading.Thread(target=producer,args=["Bob",])
    # p4=threading.Thread(target=producer,args=["Z1",])
    # p5=threading.Thread(target=producer,args=["Z2",])
    c1.start()
    c2.start()
    c3.start()
    p.start()
    p2.start()
    # p3.start()
    # p4.start()
    # p5.start()
    
  • 相关阅读:
    C#如何连接wifi和指定IP
    3.4 小结
    3.3.4.5 起始与清除
    3.3.4.4 打印行
    3.3.4.3 设置字段分隔字符
    3.3.4.2 字段
    3.3.4.1 模式与操作
    3.3.4 使用 awk 重新编排字段
    3.3.3 使用 join 连接字段
    3.3.2 使用 cut 选定字段
  • 原文地址:https://www.cnblogs.com/yard/p/5622128.html
Copyright © 2011-2022 走看看