zoukankan      html  css  js  c++  java
  • python3 进行与进程之间数据是隔离的

    进程与进程之间数据是隔离的

    from multiprocessing import Process
    
    
    def func(lst, name):
        lst.append(66)
        print(name, lst)
    
    
    if __name__ == '__main__':
        lst = [1, 2]
        p1 = Process(target=func, args=(lst, "进程1"))
        p2 = Process(target=func, args=(lst, "进程2"))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        print("主进程结束", lst)

    执行结果:

    进程1 [1, 2, 66]
    进程2 [1, 2, 66]
    主进程结束 [1, 2]

    global来演示进程之间数据是隔离的

    from multiprocessing import Process
    
    
    def func(name):
        print(f"{name}开始")
        global n
        n = 0
        print(f"{name}结束,n={n}")
    
    
    if __name__ == '__main__':
        n = 100
        p1 = Process(target=func, args=("进程1",))
        p2 = Process(target=func, args=("进程2",))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        print(f"主进程结束,n={n}")

    执行结果:

    进程1开始
    进程1结束,n=0
    进程2开始
    进程2结束,n=0
    主进程结束,n=100

     

    再看个会报错的程序

    from multiprocessing import Process
    
    
    def func(name):
        print(f"{name}开始")
        global n
        print(f"n={n}")
        n = 0
        print(f"{name}结束,n={n}")
    
    
    if __name__ == '__main__':
        n = 100
        p1 = Process(target=func, args=("进程1",))
        p2 = Process(target=func, args=("进程2",))
        p1.start()
        p2.start()
        p1.join()
        p2.join()
        print(f"主进程结束,n={n}")

    执行结果:

    进程1开始
    Process Process-1:
    Traceback (most recent call last):
      File "G:python3.6libmultiprocessingprocess.py", line 258, in _bootstrap
        self.run()
      File "G:python3.6libmultiprocessingprocess.py", line 93, in run
        self._target(*self._args, **self._kwargs)
      File "G:python28codeday08整理笔记已记录进程与进程之间数据是隔离的222.py", line 7, in func
        print(f"n={n}")
    NameError: name 'n' is not defined
    进程2开始
    Process Process-2:
    Traceback (most recent call last):
      File "G:python3.6libmultiprocessingprocess.py", line 258, in _bootstrap
        self.run()
      File "G:python3.6libmultiprocessingprocess.py", line 93, in run
        self._target(*self._args, **self._kwargs)
      File "G:python28codeday08整理笔记已记录进程与进程之间数据是隔离的222.py", line 7, in func
        print(f"n={n}")
    NameError: name 'n' is not defined
    主进程结束,n=100

    通过对比可以发现,即使使用了global引用全局变量n,子进程里也没有成功的引入进来。

  • 相关阅读:
    结对-结对编项目贪吃蛇-开发环境搭建过程
    gitbook serve运行报错TypeError: cb.apply is not a function
    iOS 工程添加的framework转成pod形式加入
    selector not recognized
    Errors were encountered while preparing your device for development. Please check the Devices and Simulators Window.
    podspec 添加xcassets
    后缀自动机(SAM)构造实现过程演示+习题集锦
    数组中存在undefined,0,null,false等的情况该如何去除
    Uncaught TypeError: date.clone is not a function 【报错解决】
    React·前端URL参数丢失符号的解决办法
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12054709.html
Copyright © 2011-2022 走看看