不同的进程是基于不同的内存空间
,二者之间,就像两个各自独立
运行的程序。
import multiprocessing
var = 0
def x1():
global var
var = 1
def x2():
print(var)
t1 = multiprocessing.Process(target=x1)
t2 = multiprocessing.Process(target=x2)
t1.start()
t1.join()
t2.start()
# 结果
0
# x2进程 不能获取 x1进程 的变量,因为他们是两块不同的内存空间
# 所以进程之间的数据交互,需要借助 pipes(管道) queue(队列) 等方式
你可以把Queue
看出是一个存数据的箱子,把数据保存在里面,可以在进程之间实现共享。
from multiprocessing import Queue
q = Queue()
# 存数据
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
# 取数据 | 顺序读取,就像队列
>>> q.get()
1
>>> q.get()
2
>>> q.get()
3
# 当没有数据的时候会阻塞,一直等到别的进程存入数据,才读取值继续执行
>>> q.get()
>>> q.get(timeout=3) # 超时 | 可以设置等待的时间
# 队列长度
>>> q.qsize()
# 是否满的
>>> q.full()
False
# 是否空的
>>> q.empty()
True
# 同步
>>> q.join() # 等待队列数据被其他进程读取完毕,在继续执行
Queue的应用
from multiprocessing import Process, Queue
q = Queue()
def x1():
q.put('data')
def x2():
print(q.get())
t1 = Process(target=x1)
t2 = Process(target=x2)
t1.start()
t2.start()
# x2进程 成功通过队列拿到 x1进程 的数据
'data'