zoukankan      html  css  js  c++  java
  • 生产者消费者模型 守护线程

    守护线程

      守护线程会在主线程结束就立即结偶完成束,即使任务没有完成

      主线程会等待所有子线程全部完成最后结束

      结论 :守护线程会在所有非守护进程结束后结束

    from threading import Thread,current_thread
    import time 
    def task1():
      print("%s正在运行...."%current_thread().name)
      time.sleep(3)
      print("%s over...."%current_thread().name)

    def task2():

      print("%s 正在运行..."%current_thread().name)
      time.sleep(10)
      print("over...."%current_thread().name)
      

    t1 = Thread(target = task1)
    t2 = Thread(target = task2)

    t1.daemon = True #守护线程必须放在start前面
    t1.start()
    t2.start()

    print("over")

    生产者消费者模型

    例子:

    王思聪作为消费者 要吃热狗

    生产者负责做热狗

    问题是不知道:王思聪不清楚对方会生产多少热狗

    from multiprocessing import Process Queue,JoinableQueue
    import time,random

    def make_hot_dog():

      for i in range(1,6):
        time.sleep(random.randint(1,3))
        print('生产者  生产了hot_dog%s ' %i)

        q.put("hot_dog%s"%i)

    def eat_hot_dog():

      while True:

      time.sleep(random.randint(1,3))

      hot_dog = q.get()
      print("思聪吃了%s" %hot_dog)
      q.task_done()
    if __name__ =="__main__":

      q = JoinableQueue()
      p1 = Process(target = mak_hot_dog,args = (q,))

      p2 = Process(target = mak_hot_dog,args = (q,)
      p1.start()

      p2.start()
      #消费者

      c1 = Process(target = eat_hot_dog,args = (q,)
      c1.daemon = True
      c1.start()
      #要确定生产者不会再生产了

      p1.join()

      p2.join()

      print("生产已经结束了“)
      #再确定队列中的所有数据都被处理完成

      q.join()

      print("思聪已经全部吃完了“)

     

  • 相关阅读:
    有关linux查看的命令 及本机yum创建
    linux系统命令1
    手机百度网盘加群方法
    百度网盘保存超限解决办法
    c#委托、泛型委托和匿名方法
    值类型和引用类型的总结
    SQL数据查询语句(一)
    c# Invoke和Begininvoke区别
    c#public、private、protected、internal、protected internal修饰符及访问权限
    C#之打印乘法表
  • 原文地址:https://www.cnblogs.com/tangda/p/10519365.html
Copyright © 2011-2022 走看看