网络编程-进程-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]

 

posted @ 2018-07-25 19:19  上海小盖伦  阅读(105)  评论(0编辑  收藏  举报