概述
多进程中,默认情况下,不能共享全局变量
执行下面代码,观察执行结果
#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全局变量
所以默认情况下,多进程不能共享全局变量,以及局部变量
类比:
相当于上英语课,老师和同学们默读同一篇课文,虽然是同一篇课文,但老师和各个同学读的进度不一样。
课文-相当于代码
老师-相当于父进程
同学-相当于子进程

