• 网络编程——生产者,消费者模型,管道


    生产者消费者模型

      主要是为了解耦

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

      栈:先进后出(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。

  • 相关阅读:
    SqlSession接口和Executor
    MySQL 存储表情字符
    Lisp学习--Windows下面的开发环境搭建
    使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝
    GIT团队合作探讨之一-保持工作同步的概念和实践
    关于IE8下media query兼容的解决方案探讨
    git下的团队合作模型及git基础知识汇集
    互联网环境下服务提供的模式
    web统计数据搜集及分析原理
    网站统计及移动应用数据统计相关术语知识详解
  • 原文地址:https://www.cnblogs.com/Loren2o/p/9519170.html
Copyright © 2020-2023  润新知