【问题描述】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
请用多进程的方式同时爬取多个公司的商誉信息,提高程序执行速度。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输出结果:t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
运行1次get_all_mp函数花费时间:2.501972198486328秒t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【题前思考】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
根据问题描述,填写表8-2-1。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
表8-2-1 问题分析t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【解题思路】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
从代码的角度来看,多线程程序和多进程程序的代码是类似的,区别在于多进程方式是使用multiprocessing模块中的Pool类来创建进程池对象,然后调用该对象的map( )方法来并行执行函数。Pool类的map( )方法的参数及返回值的意义与concurrent.futures.ThreadPoolExecutor类的map( )方法相似。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【参考代码】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【代码分析】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
①:从multiprocessing模块导入Pool类和cpu_count( )函数。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
②:定义函数get_all_mp( )以多进程方式获取公司商誉数据。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
③:创建进程池对象p,进程数量为CPU数量。cpu_count( )函数用于取得逻辑CPU数量,如双核四线程CPU将会认为有4个CPU。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
④:调用map( )方法以多进程方式并行执行函数get_proportion_of_goodwill( ),各函数参数在列表stocklist中,各函数调用返回值以列表形式返回到变量res。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【技术全貌】t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
进程池Pool可以自动控制进程。Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果进程池还没有满,就会创建一个新的进程来执行请求;如果池满,请求就会告知先等待,直到池中有进程结束。使用Pool来创建和管理进程的方法见表8-2-2。t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
表8-2-2 使用Pool创建和管理进程的方法t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
t46100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库