线程与进程共享全局变量的区别及代码验证实例分析

[id_883531955[id_922603571]id_1145421362]

线程与进程共享全局变量的区别及代码验证实例分析

所以线程之间可以共享全局变量,因为共用一片空间

不同进程会使用不同的空间。因为使用的资源本质上是不同的,所以一片空间上的变量发生变化,不会对另一个空间的资源变化产生影响。

通过代码来对比2者的区别:

多线程实现:

import threading
import time
num = 100
def demo1():
    global num
    num += 100
    print(f'demo1 中的 num 等于 num')
def demo2():
    print(f“demo2 中的 num 等于具体的某个数”)
def main():
    t1 = threading.Thread(target=demo1)
    t2 = threading.Thread(target=demo2)
    t1.start()
    t2.start()
if __name__ == '__main__':
    main()

运行结果:

----demo1—num=200

------demo2-----num=200

说明线程之间共享了该全局变量

进程代码:

import multiprocessing
import time
num = 100
lst = []
def main():
    p1 = multiprocessing.Process(target=demo1)
    p2 = multiprocessing.Process(target=demo2)
    p1.start()
    p2.start()
def demo1():
    global num
    num += 100
    print(f'-----demo1----{num}')
    lst.append(num)
    print(lst)
    #time.sleep(1)
def demo2():
    time.sleep(1)
    print(f'-----demo2----{num}')
    print(lst)
if __name__ == '__main__':
    main()

执行结果:

-----demo1----200

[200]

-----demo2----100

[]

从执行结果可以验证不同进程,全局变量是不可以共享的

在此我测试了列表和全局变量num

如何实现全局变量的进程共享呢?可以通过进程间交互的桥梁,也就是 multiprocess 的内置类 Quene 来实现。

import multiprocessing
from multiprocessing import Queue
def download(q):
    lst = [1,2,3]
    for i in lst:
        q.put(i)
    print('添加完毕')
def manage_data(q):
    #将队列的元素取出来,存到新的列表中
    man_data = list()
    while True:
        data = q.get()
        man_data.append(data)
        if q.empty():
            break
    print(man_data)
def main():
    q = Queue()
    p1 = multiprocessing.Process(target=download,args=(q,))
    p2 = multiprocessing.Process(target=manage_data,args=(q,))
    p1.start()
    p2.start()

执行结果:

添加完毕

[1, 2, 3]

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

30阅读

外国教程python,python编程教学视频

2026年09月02日

24阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读