zoukankan      html  css  js  c++  java
  • 网络编程——生产者,消费者模型,管道

    生产者消费者模型

      主要是为了解耦

      借助队列来实现生产者消费者模型

      栈:先进后出(First In Last Out  简称FILO)

      队列:先进先出(First In First Out  简称FIFO)

    这里需要学习两个模块

    (一)

    Import queue  #不能进行多进程之间的数据传输

    from multiprocessing import Queue   借助Queue解决生产者消费者模型

      队列是安全的

      q = Queue(num)

      num : 队列的最大长度

      q.get() #阻塞等待获取数据,如果有数据直接获取,如果没有数据,阻塞等待

      q.put() #阻塞,如果可以继续往队列中放数据,就直接放,不能放就阻塞等待

      

      q.get_nowait() #不阻塞,如果有数据直接获取,没有数据就报错

      q.put_nowait() #不阻塞,如果可以继续往队列中放数据,就直接放,不能放就报错

      

    (二)

    from multiprocessing import JoinableQueue  #可链接的队列

    JoinableQueue 是继承Queue,所以可以使用Queue中的方法

    并且JoinableQueue又多了两个方法

    q.join()  #用于生产者,等待 q.task_done的返回结果,通过返回结果,生产者就能获得消费者当前消费了多少个数据

    q.task_done()  #用于消费者,是指每消费队列中一个数据,就给join返回一个标识

    管道

      from multiprocessing import Pipe

      con1, con2 - Pipe()

      管道是不安全的

    管道用于多进程之间通信的一种方式

    如果在单进程中使用管道,那么就是con1 收数据,con2发数据

                  如果是con1发数据,就是con2收数据

    如果在多进程中使用管道,那么就必须是父进程使用con1收,子进程就必须使用con2发

                      父进程使用con1发,子进程就必须使用con2收

                      父进程使用con2收,子进程就必须使用con1发

                      父进程使用con2发,子进程就必须使用con1收

    在管道中又一个著名的错误EOFError, 是指,父进程中如果关闭了发送端,子进程还继续接收数据,那么就会引发EOFError。

  • 相关阅读:
    基于 HTML5 WebGL 的发动机 3D 可视化系统
    基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版
    用 HTML5 造个有诚意的 23D 招聘稿
    基于 HTML5 Canvas 的 3D 热力云图效果
    基于 HTML5 和 Canvas 实现的 3D 垃圾分类系统
    xcode10 改动
    __NSArrayI __NSArray0 __NSSingleObjectArrayI __NSPlaceholderArray __NSArrayM
    iOS开发之Found a swap file by the name ".podfile.swp" owned by: Netban dated:...file name: ~N...
    关于程序的测试
    ios the request was denied by service delegate for reason unspecified
  • 原文地址:https://www.cnblogs.com/Loren2o/p/9519170.html
Copyright © 2011-2022 走看看