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

  • 相关阅读:
    数组中出现次数超过一半的数字
    Trie字典树算法
    字符串匹配算法 之 基于DFA(确定性有限自动机)
    实现栈最小元素的min函数
    有关有环链表的问题
    浅谈C中的malloc和free
    undefined reference to 'pthread_create'问题解决
    用两个栈实现队列
    resf规范
    单例模式
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12054709.html
Copyright © 2020-2023  润新知