网络编程-进程-4、队列完成进程之间的通信
前言:之前说过,多个进程之间是不能共享全局变量的,那么怎么解决这个问题呢?通过队列Queue去解决这个问题
1、看代码演示,解释看注解:
#!/usr/bin/env python # coding=utf-8 # author:刘仲 # datetime:2018/7/25 16:31 # software: PyCharm import multiprocessing """定义一个全局变量num,线程函数test1修改全局变量num然后放进num1空列表,然后调用队列对象中的put方法 将num1列表放进队列中,线程函数test2调用队列对象中的get方法获取到队列中数据,这就完成了进程之间的通信, 也就解决了进程之间不能共享全局变量的问题 """ num = 0 def test1(q): global num num1 = list() for i in range(5): num += 1 num1.append(num) q.put(num1) def test2(q): while True: # 循环获取队列里面的值 if q.empty(): # 当队列里没有数据时,即全部拿完了,就退出循环 break data = q.get() print(data) def main(): # 创建队列对象,然后将对象以实参传给子进程函数 q = multiprocessing.Queue() # 括号里可以加数字,表示队列里最多能放多少个数据 t1 = multiprocessing.Process(target=test1, args=(q,)) t2 = multiprocessing.Process(target=test2, args=(q,)) t1.start() t1.join() t2.start() if __name__ == '__main__': main()
运行结果如下:
[1, 2, 3, 4, 5]