from multiprocessing import Process, Queue # 导入Process和Queue
import os, time, random
def write(q): # 定义函数,接收Queue的实例参数
for v in range(10):
print('Put %s to Queue' % v)
q.put(v) # 添加数据到Queue
time.sleep(1)
def read(q): # 定义函数,接收Queue的实例参数
while True:
if not q.empty(): # 判断,如果Queue不为空则进行数据取出。
v = q.get(True) # 取出Queue中的数据,并返回保存。
print('Get %s from Queue' % v)
time.sleep(1)
else: # 如果Queue内没有数据则退出。
print("没有发现数据")
continue
#break
if __name__ == '__main__':
q = Queue() # 实例化Queue括号内可选填,输入数字表示有多少个存储单位。以堵塞方式运行。必须等里边有空余位置时,才能放入数据,或者只能等里边有数据时才能取出数据,取不出数据,或者存不进数据的时候则会一直在等待状态。
pw = Process(target=write, args=(q,)) # 实例化子进程pw,用来执行write函数,注意这里的函数不带括号,只是传递引用,参数需要使用args参数以元组的方式进行接收。
pr = Process(target=read, args=(q,)) # 实例化子进程pr,用来执行read函数,注意这里的函数不带括号,只是传递引用,参数需要使用args参数以元组的方式进行接收。
pw.start() # 开始执行pw。
pr.start() # 开始执行pr。
pw.join() # 等待pw结束
pr.join() # 等待pr结束
print('Over') # 主进程结束
输出
Put 0 to Queue
Get 0 from Queue
Put 1 to Queue
没有发现数据
Get 1 from Queue
Put 2 to Queue
没有发现数据
没有发现数据
Get 2 from Queue
Put 3 to Queue
没有发现数据
Get 3 from Queue
Put 4 to Queue
没有发现数据
Get 4 from Queue
Put 5 to Queue
没有发现数据
Get 5 from Queue
Put 6 to Queue
Get 6 from Queue
Put 7 to Queue
没有发现数据
没有发现数据
没有发现数据
Get 7 from Queue
Put 8 to Queue
没有发现数据
没有发现数据
Get 8 from Queue
Put 9 to Queue
没有发现数据
Get 9 from Queue
没有发现数据
没有发现数据
没有发现数据
没有发现数据
没有发现数据
没有发现数据