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)










  • 相关阅读:
    java移位运算符详解[转]
    Android四大基本组件介绍与生命周期
    oracle中怎么得到日期相减除去周末后的天数
    小计_合计_统计
    Oracle--SQL技巧之一(查询连续的记录)
    游戏中地图的制作(一)
    在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习
    C语言调用python代码
    XML文件中怎么写小于号 等特殊符号
    system->copy 和 ShellExecute 用法
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9519240.html
Copyright © 2011-2022 走看看