简单的线程池——从单线程到多线程——从零基础到零基础(站长素材)

news2024/11/25 13:19:19

多进程(Process)-读取到数据,要用cpu来运行大量的次数和时间(多线程)(cpu密集型)——multiprocessing

多线程(Thread)-IO多的,同时运行任务数目不多(多线程)(IO密集型)——threading

多协程(Coroutine)-request不可以用这个,只能用aiohttp(推荐),一个线程可以有N个协程(单线程)(IO密集型)——asyncio

单线程就是一个主线程,就是一条线走到黑。(耗时)cpu和IO同时进行,cpu爬取,IO存储

多线程就是好多个线程一起搞。(省时)

我在网上看,有的真的是好难,不适合入门。最终在b站找到一个简单的线程池方法(pool)。(超简单实现。)

这个是没有上-多线程

先说一下单线程爬取(也是很困难)

有迷惑你的链接在哪,你会发现你爬不到。爬到的要不然就是空的,要不然就是

<Element img at 0x1b0c8709640>

出现这个。


import os

import requests
from lxml import etree
from lxml import html
from html.parser import HTMLParser
import re
count = 0
wenjian = input("你的照片将要储存到......文件夹:")
img_path = f"./{wenjian}/"  # 指定保存地址
if not os.path.exists(img_path):
    print("您没有这个文件为您新建一个文件:")
    os.mkdir(img_path)
else:
    for i in range(1,5,1):
        if i==1:
            url = "https://sc.chinaz.com/tupian/nvshengtupian.html"
        else:
            url = f"https://sc.chinaz.com/tupian/nvshengtupian_{i}.html"
            headers = {
                "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
            }
            response = requests.get(url,headers=headers)
            response.encoding= "utf-8"
            response = response.text
            img_html = re.findall('data-original="(.*?)"',response)
            for img in img_html:
                img = 'https:'+img
                count += 1
                myimg = requests.get(img)
                file_name = f'{img_path}图片{str(count)}.jpg'
                # 图片和音乐WB的二进制写入方式
                f = open(file_name, "wb")
                f.write(myimg.content)
                print("正在保存" + str(count) + " 张图片")

1.这个utf-8,有必要的。防止意外 

response.encoding= "utf-8"


用的是线程池(pool)

import os
import time
import requests
import re
from multiprocessing.dummy import Pool


urls = []
def xieru(myimg):
    print("start")
    file_name = f'{img_path}图片{myimg}.jpg'
    # 图片和音乐WB的二进制写入方式
    f = open(file_name, "wb")
    f.write(myimg.content)
    # print("正在保存" + str(count) + " 张图片")
    print('end')
start = time.time()
count = 0
wenjian = input("你的照片将要储存到......文件夹:")
img_path = f"./{wenjian}/"  # 指定保存地址
if not os.path.exists(img_path):
    print("您没有这个文件为您新建一个文件:")
    os.mkdir(img_path)
else:
    page = input("你要爬取多少页:")
    for i in range(1,int(page),1):
        if i==1:
            url = "https://sc.chinaz.com/tupian/nvshengtupian.html"
        else:
            url = f"https://sc.chinaz.com/tupian/nvshengtupian_{i}.html"
        headers = {
            "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
        }

        response = requests.get(url,headers=headers)
        response.encoding= "utf-8"
        response = response.text
        img_html = re.findall('data-original="(.*?)"',response)
        for img in img_html:
            img = 'https:'+img
            myimg = requests.get(img)
            urls.append(myimg)


pool = Pool(4)
pool.map(xieru,urls)
pool.close()
pool.join() #主进程阻塞后,让子进程继续运行完成,子进程运行完后,再把主进程全部关掉。
end = time.time()
print(end-start)

今天先到这里,现在跟着up主  ——蚂蚁学Python。学习多线程,多进程,多协程。

尝试了Xpath,最后还是觉得re好用,在selenuim中还是CSS好用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32学习笔记-STLINK使用

stm32学习笔记-STLINK使用 使用ST-LINK调试程序进度表格 使用ST-LINK调试程序 说明 组成 总结 记录使用STLINK进行项目的烧写和调试&#xff0c;旨在高效的进行代码调试学习工具包括笔记本、keil5MDK、stm32f030c8t6电表主机、STLINK V2、导线、电表代码总的来说&#xff0…

Kernel 地图

前言 在 Linux Kernel 中&#xff0c;根据 Makefile 和 Kconfig&#xff0c;可以快速地了解一个小的内核子系统。所以我将这两个文件称之为 Kernel 地图。 Kernel 地图 基本上&#xff0c;Linux 内核中&#xff0c;每一个目录下面都有一个 Makefile 和一个 Kconfig 文件。这…

ubuntu 之 zeitgeist-fts 占用内存

座右铭&#xff1a;怎么简单怎么来&#xff0c;以实现功能为主。 欢迎大家关注公众号与我交流 sudo chmod -x /usr/bin/zeitgeist-daemonsudo chmod -x /usr/bin/zeitgeist-datahublocate zeitgeist-ftssudo chmod -x /usr/lib/x86_64-linux-gnu/zeitgeist-fts # 使用 locate z…

星纪魅族宣布 All in AI;欧盟将首次对苹果处以罚款丨 RTE 开发者日报 Vol.146

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

125.乐理基础-五线谱-大六度、小六度

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;124.乐理基础-五线谱-大三度、小三度-CSDN博客 上一个内容里练习的答案&#xff1a; 然后g1到降e2是一个六度&#xff0c;g1到e2也是一个六度&#xff0c;但是它们俩距离是不一样的 然后在六度前面加上大或小&…

盲盒小程序开发:创新科技与消费者心理的完美结合

随着科技的飞速发展&#xff0c;小程序已经深入到我们生活的方方面面。而在众多小程序中&#xff0c;盲盒小程序以其独特的魅力&#xff0c;吸引了大量消费者的关注。本文将探讨盲盒小程序的发展背景、市场需求、开发流程以及未来趋势&#xff0c;以期为相关行业的从业者提供一…

mybatis-plus(五)-mybatis处理多数据源

mybatisplus多数据源 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>2.5.6</version> </dependency>配置文件 创建一个数据用户&#x…

【XR806开发板试用】+移植rosserial到XR806

1 XR806简介 板子来源于极术社区的试用&#xff0c;XR806的在线网址 其主要参数&#xff1a; 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线&#xff0c;可共存按键reboot按键 1&#xff0c;功能按键 1灯红色电源指示灯 1…

快速部署MES源码/万界星空科技开源MES

什么是开源MES软件&#xff1f; 开源MES软件是指源代码可以免费获取、修改和分发的MES软件。与传统的商业MES软件相比&#xff0c;开源MES软件具有更高的灵活性和可定制性。企业可以根据自身的需求对软件进行定制化开发&#xff0c;满足不同生产环境下的特定需求。 开源MES软件…

three.js 物体下落动画(重力加速度)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><el-button click"loopFun"> 物体下落…

Java 基于 SpringBoot+Vue 的高校招生系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Java学习--黑马SpringBoot3课程个人总结-2024-02-14

1.子路由 //定义路由关系 const routes[{ path: /login, component: LoginVue},{ path: /, component: LayoutVue,redirect:/article/manage,children:[{path:/article/category,component:ArticleCategoryVue},{path:/article/manage,component:ArticleManageVue},{path:/…

【漏洞复现-通达OA】通达OA share身份认证绕过漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是中国通达公司的一套协同办公自动化软件。通达OA /share/handle.php存在一个认证绕过漏洞,利用该漏洞可以实现任意用户登录。攻击者可以通过构造恶意攻击代码,成功登录系统管理员账户,继而在系统后台上传恶意文件控…

Transformer位置表示(Position Encoding)

为什么需要位置表示 对比CNN、RNN和Self-Attention: CNN处理相邻窗口的内容&#xff1b;RNN天然是序列操作&#xff0c;考虑了位置先后关系&#xff1b;Self-Attention的计算时是无序的&#xff0c;所以需要位置表示来知道Token之间的位置信息。 绝对位置表示 典型如&#xf…

数据结构中图的概念以及遍历算法的实现

在数据结构中&#xff0c;图&#xff08;Graph&#xff09;是由节点&#xff08;Vertex&#xff09;和连接节点的边&#xff08;Edge&#xff09;组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接&#xff0c;如社交网络、道路网络、电路等。 图由两个主要…

LiveGBS流媒体平台GB/T28181常见问题-基础配置流媒体服务配置中本地|内网IP外网IP(可选)外网IP收流如何配置

LiveGBS常见问题基础配置流媒体服务配置中本地|内网IP外网IP外网IP收流如何配置&#xff1f; 1、流媒体服务配置2、播放提示none rtp data receive3、多网卡服务器4、收流端口配置5、端口区间可以如何配置6、搭建GB28181视频直播平台 1、流媒体服务配置 LiveGBS中基础配置-》流…

【小呆的力学笔记】弹塑性力学的初步认知五:初始屈服条件(1)

文章目录 3. 初始屈服条件3.1 两个假设以及屈服条件基本形式3.2 π \pi π平面、Lode参数3.3 屈服曲线的一般特征 3. 初始屈服条件 3.1 两个假设以及屈服条件基本形式 在简单拉伸时&#xff0c;材料的屈服很明确&#xff0c;即 σ > σ s (1) \sigma\gt\sigma_s\tag{1} …

nvm安装配置环境

前言 对于前端开发人员来说&#xff0c;多个项目可能用的不同的node版本&#xff0c;如何方便快速的转换版本&#xff0c;nvm版本管理工具的出现&#xff0c;解决这个问题。 实战 1. 搜索nvm版本&#xff0c;我用的1.1.2&#xff0c;下载后直接安装。 2.在d盘建立nvm空文件…

深入理解MySQL索引底层数据结构

一、索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构&#xff1b; 二、索引为什么使用BTree 1、索引为何不用二叉树结构 当索引字段递增时&#xff0c;如主键索引&#xff0c;二叉树会退化成一个链表&#xff0c;如果是数据有几百上千万&#xff0c;那链表就会很…

【Spring】三级缓存

目录标题 触发所有未加载的实例a - 开始getBean&#xff08; doGetBean&#xff09; - 获取单例beangetSingleton() - 获取单例beancreateBean&#xff08;doCreateBean&#xff09; - 创建beancreateBeanInstance - 创建并返回beanaddSingletonFactory -放三级缓存populateBea…