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,子进程里也没有成功的引入进来。

  • 相关阅读:
    VGA实验 :逻辑分析仪
    VGA实验:点亮屏幕
    ASP.NET 4‎.0 生成 eurl.axd Http异常错误的处理方法 (汗IIS 怎这么多莫名其妙的问题)
    腾讯检测 IP 省市的接口
    hql 中cast 方法的使用
    asp.net 防止外部提交数据(转)
    为 SQL Server 启用缓存通知
    net中前台 javascript与后台c#函数相互调用
    const 与 readonle 的异同
    获取页面执行时间的几种方法(asp.net转)
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12054709.html
Copyright © 2011-2022 走看看