zoukankan      html  css  js  c++  java
  • 网络编程-进程-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]
  • 相关阅读:
    webpack浅析
    MongoDB简易
    async函数
    react -- context
    抓包移动端方法
    stateless 无状态组件
    移动端适配
    JS和JQuery获取和修改Label的值的示例代码
    HTML DOM querySelector() 方法
    filter
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9367831.html
Copyright © 2011-2022 走看看