进程池,线程池与跨进程数据共享爬取某岸网图片
看教程的时候看到一个,生产者跟消费者的概念比较有意思,但是给的代码有问题无法正常运行,于是我就捣鼓了一下。
基本概念就是:
生产者: 一个进程获取网页没页的图片连接(主进程)
消费者: 一个进程下载图片,不同的是每个页面有20张图片,所以在进程中又开了二十线程(子进程)
嗯,概念就是这样接下来看代码
# -*- coding: utf-8 -*-
# @Time :2023/9/30 22:46
# [url=home.php?mod=space&uid=686208]@AuThor[/url] :
# @FileName :进程池.线程池配合使用与进程共用变量的使用.py
# [url=home.php?mod=space&uid=2097534]@IED[/url] :PyCharm""""""
import multiprocessing
import requests
import os
from concurrent.futures import ThreadPoolExecutor
from lxml import etreepath = r'D:\img'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/117.0.0.0 Safari/537.36'
}# 获取图片地址
def get_url(url, que):resp = requests.get(url, headers=headers)resp.encoding = resp.apparent_encodingdate = resp.texttree = etree.HTML(date)list_url = tree.xpath('//ul[@class="clearfix"]/li/a')for i in list_url:url_img = i.xpath('./img/@src')que.put('https://pic.netbian.com' + str(*url_img)) # put写入进程变量队列中resp.close()# 下载并保存图片
def download_ove(url, name):try:resp = requests.get(url, headers=headers)path_img = os.path.join(path, f'{name.value}.jpg')with open(path_img, 'wb') as f:f.write(resp.content)print(f'保存成功{name.value}.jpg')name.value += 1 # 数值型进程变量自增except Exception as ex:print('下载出错', ex)# 获取进程队列中的url并启用线程池下载保存图片
def download_img(que, name):# 创建线程池,指定20个线程处理数据with ThreadPoolExecutor(20) as t:while True:try:s = que.get(timeout=3) # 获取进程队列中的数据,等待3秒若是还没获取到数据抛出异常t.submit(download_ove, s, name) # 添加进线程池# t.submit(download_ove, s).add_done_callback(err_call_back) # 获取线程池异常except Exception as ec:print(ec)break# 接收进程池与线程池异常的回调函数
def err_call_back(err):print(f'出错啦~ error:{str(err)}')if __name__ == '__main__':if not os.path.exists(path):os.mkdir(path)que = multiprocessing.Manager().Queue() # 创建一个进程之间共享的队列变量name = multiprocessing.Manager().Value('i', 0) # 创建一个进程之间共享的数值型变量,'i'表示整型数字,0表示从0开始for i in range(1, 4):if i != 1:url = f'https://pic.netbian.com/4kdongman/index_{i}.html'else:url = 'https://pic.netbian.com/4kdongman/'get_url(url, que)# 创建进程池,并将函数添加到进程池内,指定最多开辟1个进程处理数据(开多了怕把网址玩崩)with multiprocessing.Pool(1) as pool:pool.apply(download_img, args=(que, name)) # 将函数以同步的方式添加进进程池# apply_async异步方式无法使用不知道为啥,不报异常也不运行download_img函数# pool.apply_async(download_img, args=(que, name), error_callback=err_call_back)pool.close() # 结束进程池,不在往内添加数据pool.join() # 等待进程池运行结束print('结束')
本代码仅作为练习所用,大家别把人家网站搞崩了。
相关文章:
进程池,线程池与跨进程数据共享爬取某岸网图片
看教程的时候看到一个,生产者跟消费者的概念比较有意思,但是给的代码有问题无法正常运行,于是我就捣鼓了一下。 基本概念就是: 生产者: 一个进程获取网页没页的图片连接(主进程…...
【 图片加载】Vue前端各种图片引用
文章目录 一、图片作为js常量(常作为配置项的值 )1、在线链接2、本地图片 二、图片img标签1、一般的src2、动态的src用require3、src可以接收二进制文件blob(如后端返回的、a-upload传的图片) 三、背景图片 一、图片作为js常量(常…...
thinkphp6生成PDF自动换行
composer安装 composer require tecnickcom/tcpdf 示例 use TCPDF;public function info($university,$performance,$grade,$major){//获取到当前域名$domain request()->domain();//实例化$pdf new TCPDF(P, mm, A4, true, UTF-8, false);// 设置文档信息$pdf->SetCr…...
wpf devexpress实现输入验证使用验证规则
打开此项目 目标是一个registration form行为像google registration form。打开Google registration form 研究它的行为。当form是第一次显示,它的“Register”按钮应该启动;编辑器没有提示任何输入错误。输入First Name编辑器字段,清理输入…...
Vue表单的整体处理
在前端的处理中,表单的处理永远是占高比例的。在BOMDOMjs的时候是这样,在Vue的时候也是这样。Vue的表单处理做了特别的优化,如值绑定、数据验证、错误提示、修饰符等。 表单组件的示例: <script setup lang"ts">…...
探索实人认证API:保障在线交互安全的关键一步
前言 在数字化时代,随着人们生活的日益数字化,各种在线服务的普及,安全性成为用户体验的至关重要的一环。特别是在金融、电商、社交等领域,确保用户身份的真实性显得尤为重要。而实人认证API作为一种先进的身份验证技术ÿ…...
XDR 网络安全:技术和最佳实践
扩展检测和响应(XDR)是一种安全方法,它将多种保护工具集成到一个统一的集成解决方案中。它为组织提供了跨网络、端点、云工作负载和用户的广泛可见性,从而实现更快的威胁检测和响应。 XDR的目标是提高威胁检测的速度和准确性&…...
【如何学习Python自动化测试】—— 警告框处理
7 、 警告框处理 在 web 中,除了上面提到的元素和操作之外,还有就是页面的提示框的处理了,页面的警告框通常分为这几类 js:alert 、 confirm 以及 prompt,这些警告框,我们都可以通过 switch_to_alert()来处…...
Jenkins Ansible 参数构建
首先在Jenkins中创建自由项目 在web端配置完成后在另一台机子上下载nginx 在gitlab端创建项目并创建文件配置代码 在有Jenkins的机器上下载Ansible [rootslave1 ~]# yum -y install epel-release [rootslave1 ~]# yum -y install ansible再进入下载nginx机器中克隆gitlab项目…...
第十五届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组(详细分析解答)
目录 1.动态的Tab栏 1.1 题目要求 1.2 题目分析 1.3 源代码 2.地球环游 2.1 题目要求 2.2 题目分析 2.3 源代码 3.迷惑的this 3.1 题目要求 3.2 题目分析 3.3 源代码 4.魔法失灵了 4.1 题目要求 4.2 题目分析 4.3 源代码 5.燃烧你的卡路里 5.1 题目要求 5.2…...
2023亚太杯数学建模B题思路+模型+代码+论文
2023亚太地区数学建模A题思路:开赛后第一时间更新,获取见文末 名片 2023亚太地区数学建模B题思路:开赛后第一时间更新,获取见文末 名片 2023亚太地区数学建模C题思路:开赛后第一时间更新,获取见文末 名片…...
GitHub 报告发布:TypeScript 取代 Java 成为第三受欢迎语言
GitHub发布的2023年度Octoverse开源状态报告发布,研究围绕AI、云和Git的开源活动如何改变开发人员体验,以及在开发者和企业中产生的影响。报告发现了三大趋势: 1、生成式AI的广泛应用: 开发人员大量使用生成式AI进行构建。越来越…...
配置hikari数据库连接池时多数据源不生效
1.原始配置,改造前: spring:# 配置数据源信息datasource:dynamic:#设置默认的数据源或者数据源组,默认值即为masterprimary: masterstrict: truedatasource:#这里采用了配置文件取值的方式,可以直接替换为数据库连接master:url: jdbc:postgr…...
matlab 最小二乘拟合平面并与XOY平面对齐
目录 一、算法原理二、代码实现1、绕原点对齐2、绕质心对齐三、结果展示1、绕原点对齐2、绕质心对齐四、测试数据本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 首先,使用最小二乘拟合平面…...
jQuery【回到顶部、Swiper轮播图、立即执行函数、链式调用、参数重载、jQuery扩展】(六)-全面详解(学习总结---从入门到深化)
目录 回到顶部 Swiper轮播图 jQuery源码_立即执行函数 jQuery源码_链式调用 jQuery源码_参数重载 jQuery扩展 回到顶部 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compati…...
day60
choice参数 1.引入 以一张信息表为例 性别 学历 工作经验 是否婚配 是否生子 客户来源 ... 针对某个可以列举完全的可能性字段,我们应该如何存储 只要某个字段的可能性时列举完全的,那么一般情况下都会采用choice参数 2.数据准备 from random imp…...
thingsboard的WebSocket API的使用
1、参考文档 Working with telemetry data | ThingsBoard Community Edition 2、订阅的命令 我们需要订阅不同的数据,那么该如何来填写参数呢,你需要参考后端代码 TelemetryPluginCmdsWrapper 以及订阅返回的结果参考类:TelemetrySubscriptionUpdate 链接地址: https:/…...
An issue was found when checking AAR metadata
一、报错信息 An issue was found when checking AAR metadata:1. Dependency androidx.activity:activity:1.8.0 requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs.:app is currently compiled against …...
搭建线上jvm监控
这里写目录标题 Springboot项目配置maven依赖application.properties添加监控JVM的配置类启动springboot项目 Prometheus配置配置grafana Springboot项目配置 maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring…...
【计算机网络笔记】数据链路层概述
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
