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)










  • 相关阅读:
    toastr.js插件用法
    JS组件系列——Bootstrap文件上传组件:bootstrap fileinput
    定制jQuery File Upload为微博式单文件上传
    微信开放平台开发(2) 网站应用微信登录
    MVC-Model数据注解(三)-Remote验证的一个注意事项
    FormsAuthentication.SetAuthCookie
    async/task/await
    Using Repository Pattern in Entity Framework
    jquery.inputmask 输入框input输入内容格式限制插件
    C# Random 生成不重复随机数
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9519240.html
Copyright © 2011-2022 走看看