python中的进程-不共享全局变量
前言
当多个进程需要同时对一个全局变量进行修改时,会修改成功吗?
提示:以下是本篇文章正文内容,下面案例可供参考
1.python进程不共享全局变量
import multiprocessing global_num = 0 def add_num(num): # global 声明修改全局变量 global global_num global_num += num print(global_num) def del_num(num): # global 声明修改全局变量 global global_num global_num -= num print(global_num) if __name__ == __main__: print(多线程执行前, global_num) # 创建子进程 # 元组传参,实参顺序要和形参一致 add_num_process = multiprocessing.Process(target=add_num, args=(30,)) # 字典传参,实参和形参顺序可以不一致 del_num_process = multiprocessing.Process(target=del_num, kwargs={ num: 10}) # 启动子进程 add_num_process.start() del_num_process.start() # cpu优先执行子进程 add_num_process.join() del_num_process.join() print(多线程执行后, global_num)
输出结果:
多线程执行前 0 30 -10 多线程执行后 0
2.python多进程不共享全局变量的原因
进程是操作系统分配资源的最小单位,每个进程都有操作系统给自己分配的内存,而变量其实就是把值存放在内存中。 全局变量也不例外,同样是将值存放在内存中。而每个子进程都会像主进程一样,从操作系统中获取自己的内存,而每一个子进程中都有自己的全局变量。这就导致了,在多进程中,进程和进程之间是不共享全局变量的。