进程间通信(IPC)
- 必要性: 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信。
- 常用进程间通信方法----消息队列
通信原理: 在内存中建立队列模型,进程通过队列将消息存入,或者从队列取出完成进程间通信。 - 实现方法
from multiprocessing import Queue
q = Queue(maxsize=0)
功能: 创建队列对象
参数:最多存放消息个数
返回值:队列对象
q.put(data,[block,timeout])
功能:向队列存入消息
参数:data 要存入的内容
block 设置是否阻塞 False为非阻塞
timeout 超时检测
q.get([block,timeout])
功能:从队列取出消息
参数:block 设置是否阻塞 False为非阻塞
timeout 超时检测
返回值: 返回获取到的内容
q.full()----------判断队列是否为满
q.empty()------判断队列是否为空
q.qsize()--------获取队列中消息个数
q.close()--------关闭队列
"""
queue_test.py
消息队列演示
"""
from multiprocessing import Queue,Process
from time import sleep
from random import randint
"""
父进程中创建IO,子进程从父进程中获取IO对象,实际上
他们操作的是同一个IO,属性相互影响
如果在各自进程中创建IO对象,那么这些IO对象互相没有
任何影响
"""
q = Queue(3)
def handle():
while True:
try:
x,y = q.get(timeout=8)
except Exception as e:
print(e)
break
else:
print("%d+%d=%d"%(x,y,x+y))
def request():
for i in range(6):
sleep(randint(1,16))
x = randint(1,100)
y = randint(1,100)
q.put((x,y))
p1 = Process(target=handle)
p2 = Process(target=request)
p1.start()
p2.start()
p1.join()
p2.join()