Python 进程通信

不同的进程是基于不同的内存空间,二者之间,就像两个各自独立运行的程序。


进程变量

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

你可以把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'
更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程