• 管道和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)










  • 相关阅读:
    javaScript表单焦点自动切换
    JavaScript禁止用户多次提交方法
    javaScript事件机制兼容【整理】
    DOM元素尺寸和位置(clientwidth ,scrollwidth , offsetwidth.......)
    javaScript给元素添加多个class
    javaScript增加样式规则(新增样式)
    javaScript动态添加样式
    工作中遇到的各种jar包说明
    springboot—Jpa原生sql使用
    Des3EncryptionUtil加密与解密
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9519240.html
Copyright © 2020-2023  润新知