进程与线程通信

博客通过代码示例对比进程和线程的数据共享情况。创建子进程时,全局变量在各进程初始值相同,进程间无信息共享;创建线程时,全局变量可在线程间共享,一个进程内的所有线程能在不借助其他方式下完成数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程:

'''
定义一个全局变量g_num,分别创建2个子进程对g_num执行不同的操作,并输出操作后的结果
'''
from multiprocessing import  Process
def plus():
    print('--------子进程1开始--------')
    global g_num  # 声明它是全局变量
    g_num += 50
    print('g_num is %d' % g_num)
    print('--------子进程1结束--------')


def minus():
    print('--------子进程2开始--------')
    global g_num  # 声明它是全局变量
    g_num -= 50
    print('g_num is %d' % g_num)
    print('--------子进程2结束--------')


g_num = 100 #  主进程初始值100
if __name__ == '__main__':
    print('--------主进程开始--------')
    print('g_num is %d' % g_num)
    p1 = Process(target=plus)  #实例化进程1
    p2 = Process(target=minus())  # 实例化进程2
    p1.start()   # 开始进程1
    p2.start()  # 开始进程2
    p1.join()   # 等待进程1结束
    p2.join()   # 等待进程2结束
    print('--------主进程结束--------')

在这里插入图片描述
在上述代码中,分别创建了2个子进程,一个子进程中令g_num加上50,另一个子进程令g_num减少50,但是从运行结果可以看出,g_num在父进程和2个子进程中的初始值都是100,也就是全局变量g_num在一个进程中的结果,没有传递到下一个进程中,就是进程之间没有共享信息。


线程:

'''
证明线程之间可以通信:
定义一个全局变量g_num.分别创建2个子线程对g_num执行不同的操作,并输出
操作后的结果
'''
from threading import Thread
import time

def plus():  # 带一个线程函数
    print('--------子线程1开始--------')
    global g_num  # 定义全局变量
    g_num += 50  #全局变量值增加50
    print('g_num is %d' % g_num)
    print('--------子线程1结束--------')

def minus():  # 第二个线程函数
    time.sleep(1)  #休眠1秒
    print('--------子线程2开始--------')
    global g_num  #  定义全局变量
    g_num -= 50  # 全局变量值减少50
    print('g_num is %d' % g_num)
    print('--------子线程2结束--------')

g_num = 100  # 定义一个全局变量
if __name__ == '__main__':
    print('--------主线程开始--------')
    print('g_num is %d' % g_num)
    t1 = Thread(target=plus)  # 实例化线程t1
    t2 = Thread(target=minus)  # 实例化线程t2
    t1.start()  # 开启线程1
    t2.start()  # 开启线程2
    t1.join()  # 等待线程1结束
    t2.join()  # 等待线程2结束
    print('--------主线程结束--------')

在这里插入图片描述

上述代码中,定义一个全局变量g_num的值是100,然后创建2个线程,一个线程将g_num的值增加50,一个线程将g_num的值减少50,如果g_num的最终结果是100,则说明线程之间可以共享数据。
从例子来看,在一个进程内的所有线程共享全局变量,能够在不使用其它方式的前提下完成多线程之间的数据共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值