网络编程:进程创建--标准库multiprocessing模块(四--Queue消息队列通信)
1、队列
【1】在内存中开辟队列结构空间,对多个进程可见。多个进程操作同一个队列对象可以实现消息的存取工作。
【2】先进先出
2、创建队列
q = Queue(maxsize = 0)
功能 : 创建队列对象
参数 : maxsize,默认表示系统自动分配队列空间
如果传入正整数则表示最多存放多少条消息
返回值 : 队列对象
3、向队列中存入消息
q.put(data,[block,timeout])
功能:向队列中存入消息
参数:data,存入的消息 (支持python数据类型)
block, 默认True ,表示当队列满时阻塞
设置为False ,则为非阻塞
timeout, 超时时间
4、获取队列消息
data = q.get([block,timeout])
功能: 获取队列消息
参数:block, 默认为True ,表示队列空时阻塞
设置为False则表示非阻塞
timeout,超时时间
返回值 : 返回获取到的消息
from multiprocessing import Queue
from time import sleep
#创建队列
q = Queue(3)
q.put(1)
sleep(0.1)
print(q.empty())
q.put("Process Queue")
q.put([1,2,3])
print(q.full())
#如设置为非阻塞则产生Full异常
# q.put(666,False) #非阻塞
# q.put(666,True,3) #超时
print(q.get())
print(q.qsize()) #查看消息数量
q.close()
#结果
False
True
1
2
from multiprocessing import Process,Queue
import time
#创建队列
q = Queue()
def fun1():
time.sleep(1)
q.put({'name':'Abby','passwd':'123'})
def fun2():
print("收到消息:",q.get())
p1 = Process(target = fun1)
p2 = Process(target = fun2)
p1.start()
p2.start()
p1.join()
p2.join()
~
#结果
收到消息: {'passwd': '123', 'name': 'Abby'}