进程:
'''
定义一个全局变量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,则说明线程之间可以共享数据。
从例子来看,在一个进程内的所有线程共享全局变量,能够在不使用其它方式的前提下完成多线程之间的数据共享。