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)










  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9519240.html
Copyright © 2011-2022 走看看