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(子进程运行完毕,开始运行主进程)

  • 相关阅读:
    1.1.9 如何从正文开始设置页眉页脚
    1.1.8 怎样在Word的页眉中插入一级标题
    1.1.5 在同一折线图中画2条曲线
    1.1.4 图片自动编号
    1.1.3 公式编号对齐
    1.1.2 一页摘要不分栏,正文分栏
    1.1.1 参考文献格式未满行直接换行
    kernel page_size
    kernel cpu_cur_freq
    kernel printk
  • 原文地址:https://www.cnblogs.com/16795079a/p/10315567.html
Copyright © 2011-2022 走看看