进程间通信:
    磁盘交互
        1,速度慢
        2,不安全
socket  本地套接字


管道 消息列队 共享内存 信号 信号量  套接字


管道通信 Pipe
   
    在内存中开辟一块空间,对多个进程可见,通过管道
    ,多个进程进行通信


    multiprocessing --> Pipe


    fd1,fd2 = Pipe(duplex = True)
        功能 : 创建一个管道
        参数 : duplex默认为True  表示双向管道
                设置为False则表示单向管道
        返回值:返回两个管道流对象,表示管道的两端
               如果是双向管道则两个均可读写
               如果为单向管道,则fd1只能读,fd2只能写


        接收消息: fd1.recv()
        发送消息:  fd2.send()


    fd1.recv()
        功能:接收消息(没次接收一条)
        参数“无
        返回值:接受到消息
    *如果管道没有消息会阻塞


    fd2.send():
        功能:消息发送,可以是字符串或其他类型
         参数:    要发送的内容
    *如果没有接收端则管道破裂


消息队列:
    队列:先进先出
        在内存中开辟队列迷行,用来存放消息,
        任何拥有队列的进程都可以存取消息


    队列的创建:
        q = Queue(maxsize = 0)
            功能:创建一个消息队列
            参数:maxsize默认为0便是队列可存放消息由内存而定
                     > 0 表示对列最多存放多少条消息
            返回值:返回消息队列对象


        q.put()
            功能:向队列中存放消息(字符串 整数 列表)
            参数:要存的消息
            *当队列满时会阻塞
        q.full()
            判断队列是否为满 满返回True
        q.get()
            功能:向队列中取出消息
            返回值:取出的消息
            *当队列空时会阻塞
        q.empty()
            判断队列是否为空,空返回True
        q.qsize()
            得到当前队列中消息的个数
        q.close() 关闭队列


        *put get中均有可选参数 block 和timeout
         block默认为True 表示阻塞函数 如果设置为False则不阻塞
         timeout  block 为True时,设置超时时间
        
共享内存:
    在内存中开辟一段空间,存储数据 对多个进程可见
    每次写入共享内存的数据会覆盖之前的内容 由于对
    内存格式化较少所以存取速度快


    from multiprocessing import Value,Array
    obj = Value(ctype,obj)
        功能:开辟共享内存空间
        参数:ctype str 要转变的c类型(对照ctype表)
            obj 写入共享内存的初始值
        返回值: 返回一个共享内存的对象
    obj.value   即可得到共享内存车内的值


    obj = Array(ctype,obj)
        功能:开辟共享内存空间
        参数:ctype 要转换的类型
             obj  存入到共享内存中的数据
                  是一个列表,要求列表中数类型一致
                  正整数,则表示开辟一个多大的序列空间
        返回值:返回一个共享内存对象