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多进程不共享全局变量的原因

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

经验分享 程序员 微信小程序 职场和发展