【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这个函数。

 

posted @ 2020-09-30 16:42  charseki  阅读(931)  评论(0编辑  收藏  举报