Queue 类是 multiprocessing模块中的函数,通过这种方式来实现进程之间的通信,就是使用了操作系统给开辟的一个队列空间,各个进程可以把数据放到该队列中,当然也可以从队列中把自己需要的信息取走。
导入模块
import time
from multiprocessing import Process,Queue
import os
创建两个进程,一个读,一个写
负责写的进程
class WriteProcess(Process):
def __init__(self,xname,mq):
Process.__init__(self)
self.name = xname
self.mq = mq
def run(self):
# 把多条数据写入到队列中
print("进程的名字:%s,ID:%s;已经启动"%(self.name,os.getpid())) # getpid() 获取进程识别码
for i in range(1,6):
self.mq.put(i) # write 进程负责把数据写入Queue
time.sleep(1) # 休眠一秒钟
print("进程的名字:%s,ID:%s;已经结束"%(self.name,os.getpid()))
负责读的进程
class ReadProcess(Process):
def __init__(self, xname, mq):
Process.__init__(self)
self.name = xname
self.mq = mq
def run(self):
print("进程的名字:%s,ID:%s;已经启动" % (self.name, os.getpid()))
while True:
# get 函数是一个阻塞的函数
value = self.mq.get(True) # 当队列中没有数据,该行代码一直阻塞着
print(value)
# 不会执行的代码
print("进程的名字:%s,ID:%s;已经结束" % (self.name, os.getpid()))
创建并启动连个进程
if __name__ == '__main__':
q = Queue()
pw = WriteProcess('write',q)
pr = ReadProcess('read',q)
# 启动两个进程
pw.start()
pr.start()
# 让父进程等待子进程结束
pw.join()
# pr进程是一个死循环
pr.terminate() # 强制杀死进程
print("父进程结束")
运行结果