背景介绍
由于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这个函数。