• 【LemonCK】MacOS关于Python进程队列qsize的坑


    背景介绍

    由于Python自带的Queue队列模块,无法实现进程之间全局变量的共享问题,所以只能通过multiprocessing.Queue实现。

    但是MacOS系统上,还是被坑到怀疑人生。。。希望跟我一样遇到这个问题的朋友,看完此帖能恍然大悟。

    正文

    实现思路:创建一个队列,添加10个任务,再创建两个进程,去处理这个队列中的所有任务。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @File:multiprocessDemo3.py    
    @E-mail:364942727@qq.com
    @Time:2020/9/29 10:31 下午 
    @Author:Nobita   
    @Version:1.0   
    @Desciption:多进程之间的通讯
    """
    
    import requests
    from multiprocessing import Process, Queue
    
    num = 1
    
    
    def work1(q):
        # 判断队列中是否有任务
        while q.qsize() > 0:
            global num
            # 获取任务
            url = q.get()
            # 执行任务
            requests.get(url)
            print('work1正在执行任务-------执行次数:{}'.format(num))
            num += 1
    
    
    def work2(q):
        # 判断队列中是否有任务
        while q.qsize() > 0:
            global num
            # 获取任务
            url = q.get()
            # 执行任务
            requests.get(url)
            print('work2正在执行任务-------执行次数:{}'.format(num))
            num += 1
    
    
    if __name__ == '__main__':
        q = Queue()
        # 创建1个队列,添加10个任务
        for i in range(10):
            q.put('http://192.168.4.169:5000')
        # 创建2个进程,处理这个队列中的10个任务
        p1 = Process(target=work1, args=(q,))
        p2 = Process(target=work2, args=(q,))
        p1.start()
        p2.start()

    然鹅却报错了:

    检查了好几遍代码,都觉得没有问题,这个时候,我不禁陷入了沉思。。。

    最后去查阅了一下multiprocess.Queue的源码,发现了这个。。。

     再然后去百度了一下这方面的资料,发现翻车的老铁还挺多,所以最终得出结论:MacOS平台无法执行qsize这个函数。

  • 相关阅读:
    Classification and Representation(分类与表示)
    静态链表
    拓扑序列
    二分图问题
    大数据概述
    QT出现应用程序无法正常启动0xc000007b的错误
    简易有穷自动机实验
    一个简易的C语言文法
    词法分析器实验报告
    浅谈词法分析器
  • 原文地址:https://www.cnblogs.com/chenshengkai/p/13755314.html
Copyright © 2020-2023  润新知