python中的进程-不共享全局变量
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多进程不共享全局变量的原因
进程是操作系统分配资源的最小单位,每个进程都有操作系统给自己分配的内存,而变量其实就是把值存放在内存中。
全局变量也不例外,同样是将值存放在内存中。而每个子进程都会像主进程一样,从操作系统中获取自己的内存,而每一个子进程中都有自己的全局变量。这就导致了,在多进程中,进程和进程之间是不共享全局变量的。
版权声明:本文为MeiWenjilu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。