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多进程不共享全局变量的原因
进程是操作系统分配资源的最小单位,每个进程都有操作系统给自己分配的内存,而变量其实就是把值存放在内存中。 全局变量也不例外,同样是将值存放在内存中。而每个子进程都会像主进程一样,从操作系统中获取自己的内存,而每一个子进程中都有自己的全局变量。这就导致了,在多进程中,进程和进程之间是不共享全局变量的。
