网络编程-进程-4队列完成进程之间的通信

Posted lz-tester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程-进程-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]

 





以上是关于网络编程-进程-4队列完成进程之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

基于队列实现生产者消费者

基于队列实现生产者消费者

常见的面试题

Rabbitmq 消息队列

Linux C语言高级编程之使用消息队列实现进程间通信!重点内容!!!

《Python》进程之间的通信(IPC)进程之间的数据共享进程池