一、进程间的数据
不同进程之间的数据不共享,相互隔离的,子进程操作主进程的数据,主进程不受影响
示例:
from multiprocessing import Process
# 全局变量 谁都可以访问
age = 10
def work(name):
global age
# 要想修改 全局变量 需要 使用global
age += 10
print(f'我是子进程 name:{name} ,age :{age}')
if __name__ == '__main__':
p = Process(target=work, args=("阿飞", ))
p.start() # 启动进程
p.join() # 等待子进程结束
print(f'主进程的age :{age}')
运行结果:
二、进程间通讯——消息队列
消息队列:在内存中创建队列模型,进程通过队列将消息存入,或者从队列中取出消息完成进程之间的通信
示例代码:
from multiprocessing import Process, Queue
import time
def write_data(q):
# 将数据写入 队列 中
ls = ['python', 'java', 'c', 'c++', 'go', 'js', 'web前端']
for i in ls:
q.put(i) # 写入队列
print(f'queue 写入数据:{i}')
time.sleep(2)
def read_data(q):
while True:
# 判断队列是否为空
if not q.empty():
# 就可以取数据
value = q.get() # 获取数据
print(f'queue 读取数据 {value}')
time.sleep(3)
else:
break
if __name__ == '__main__':
# 生成队列对象
q = Queue()
# 创建进程
w = Process(target=write_data, args=(q, ))
r = Process(target=read_data, args=(q, ))
w.start()
print(w.name)
w.join()
r.start()
print(r.name)
r.join()
print("数据读取完毕")
运行结果: