zoukankan      html  css  js  c++  java
  • 队列 Queue JoinableQueue

    from multiprocessing import Process, Queue

    def f1(q);

      for  i   in range(10):

        q.put(i)

    def f2(q):

      whlie 1:

       print(q.get())

    if   __name__ == '__main__':

      q = Queue(10)#队列的容量

      a = Process(target=f1,args=(q,)

      b = Process(target=f2,args=(q,)

      a.start()

      b.start()

    上面的是错误的  因为q.put拿不到值的时候会一直等待 导致程序阻塞 卡在q.put这里

    第二种完美解决这个问题  JoinableQueue

    from multiprocessing import JoinableQueue

    def up(p):

      for i in range(10):

        p.put(i)

      p.join()#等待task_done()返回的信号量和put进去的数量一直才会往下执行

      print(当task_done()返回的信号数量一致时就会执行这里)

    def down(p);

      while 1:

        p.get()

        p.task_done()

    if  __name__ == "__main__":

       p = JoinableQueue(30)#这个是队列的容量

       p1 = Process(targer=up,args=(p,))

       p2 = Process(target=down,args=(p,))

       p1.start()

       p2.daemon = True# 将p2设置成守护进程 因为p2一直是死循环,设置成守护进程之后当主程序代码运行完毕,p2就会结束,不会成为僵尸进程

       p2.start()

       p1.join()

       print(子进程运行完毕,开始运行主进程)

  • 相关阅读:
    vue --- 脚手架初始化项目中配置文件webpack.base.conf.js代码含义
    Chrome
    es8 --- 新特性
    es7 --- 新特性
    vue --- 关于多个router-view视图组件,渲染同一页面
    vue ---- 组件传值之间使用 v-model
    vue --- watch 高级用法
    js --- 递归结构图
    es6 --- Generator 函数
    es6 -- set 数据结构
  • 原文地址:https://www.cnblogs.com/16795079a/p/10315567.html
Copyright © 2011-2022 走看看