python-多进程默认不能共享全局变量

概述

多进程中,默认情况下,不能共享全局变量

执行下面代码,观察执行结果

#coding=utf-8

from multiprocessing import Process
import os
import time

#全局变量
num=0
def fun():
    global num
    while True:
        #修改全局变量
        num+=1
        print('子进程pid=%d,num=%d'%(os.getpid(),num))
        time.sleep(2)

if __name__ == "__main__":
    print('主进程pid=%d'%os.getpid())

    p=Process(target=fun)
    p.start()
    print('子进程pid=%d'%(p.pid))

    while True:
        #修改全局变量
        num+=1
        print('主进程pid=%d,num=%d'%(os.getpid(),num))
        time.sleep(2)

执行结果:

观察发现,两个进程都修改 同一个 全局变量num,但是互相不影响,个是个的

原因:

  • 从程序上看,代码是同一份代码
  • 从进程上看,虽然是 父进程创建了子进程,但 两个进程各自独立,内存也是各自独立,在 各自的内存 中都有 num全局变量

所以默认情况下,多进程不能共享全局变量,以及局部变量

类比:
相当于上英语课,老师和同学们默读同一篇课文,虽然是同一篇课文,但老师和各个同学读的进度不一样。
课文-相当于代码
老师-相当于父进程
同学-相当于子进程


原文出处:/show_1EF2o3PWW2N3.html