zoukankan      html  css  js  c++  java
  • 管道和Manager模块(进程之间的共享内容)

    单进程管道
    管道是不安全的。
    管道是用于多进程之间通信的一种方式。
    如果在单进程中使用管道,那么就是con1收数据,就是con2发数据。
    如果是con1发数据,就是con2收数据
    from multiprocessing import Pipe
    con1,con2 = Pipe()
    con1.send(123)
    print(con2.recv())
    
    con2.send("abc")
    print(con1.recv())
    多进程管道
    如果在多进程中使用管道,那么就必须是父进程使用con1收,子进程就必须使用con2发
    父进程使用con1发,子进程就必须使用con2收
    父进程使用con2收,子进程就必须使用con1发
    父进程使用con2发,子进程就必须使用con1收
    在管道中有一个著名的错误叫做EOFError。是指,父进程中如果关闭了发送端,子进程还继续接收数据,
    那么就会引发EOFError。

    from multiprocessing import Pipe,Process
    def func(con):
        con1,con2 = con
        con1.close()
        print(con2.recv())
    
    if __name__ == '__main__':
        con1,con2 = Pipe()
        p = Process(target=func,args=((con1,con2),))
        p.start()
        con2.close()
        con1.send("我爱你")
    
    
    from multiprocessing import Pipe,Process
    def func(con):
        con1,con2 = con
        con1.close()
        while 1 :
            print(con2.recv())
    
    if __name__ == '__main__':
        con1,con2 = Pipe()
        p = Process(target=func,args=((con1,con2),))
        p.start()
        con2.close()
        for i in range(10):
            con1.send(i)
        con1.close()
    报错:EOFError
    
    from multiprocessing import Pipe,Process
    def func(con):
        con1,con2 = con
        con1.close()
        while 1 :
            try:
                print(con2.recv())
            except EOFError:
                con2.close()
                break
    if __name__ == '__main__':
        con1,con2 = Pipe()
        p = Process(target=func,args=((con1,con2),))
        p.start()
        con2.close()
        for i in range(10):
            con1.send(i)
        con1.close()
    from multiprocessing import Manager
    m = Manager()
    num = m.dict({键: 值})
    num = m.list([1, 2, 3])
    from multiprocessing import Manager,Process
    def func(n):
        n[0]-=1
        print("子进程中的n的值是",n)
    
    if __name__ == '__main__':
        m = Manager()
        n = m.list([1,2,3,4])
        p = Process(target=func,args=(n,))
        p.start()
        p.join()
        print("父进程中的n的值是", n)










  • 相关阅读:
    硬件基础---拆装机
    Dynamics CRM 2015 Update 1 系列(4): 自己定义主键
    Heroku第三方服务接入指南(二)
    ssh 免密登录
    CentOS 7 NAT软路由
    Nginx升级
    挖矿病毒
    安装 epel-release
    hydra 安装和使用
    Linux 安全信息查看
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9519240.html
Copyright © 2011-2022 走看看