第五周——爬虫入门 Day5 7.29

帕塞瓦尔定理(Parseval‘s theorem)的证明 帕塞瓦尔定理(Parseval's theorem)表明了信号在时域和频域上的能量相等。 阅读详情

学习时间:9:00——11:00             16:00——19:30

补充概念:进程、线程

进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

本质区别:Windows系统中,进程只是资源的分配单位,而线程才是CPU调度运行的基本单位。线程也被称为轻量级进程。

举个例子,进程就像是一个工厂,而线程就是工厂里的流水线,一个工厂里可以有多条流水线,这些流水线共享资源和数据,而不同进程也就是不同的工厂,有各自独立的内存空间,相互独立。

多个进程的程序,调度依然是按照多个线程去进行调度,由于CPU时间片分配给每个独立调度的线程,拥有四个线程的进程比拥有一个线程的进程会拥有更多的CPU时间片,就像原本只有一条流水线,现在同时有四条流水线运行,自然也就达到了加速程序的效果。就CPU利用率来讲,如果一个有四个线程的进程运行在一个四核的CPU机器上,那么核的利用率可以达到100%,即所有的核都可以调度运行一个线程, 不会出现一方有难,八方围观的情况。同样,四个单线程进程也能使四核的CPU机器计算资源利用率达到100%,因为每个进程中的线程被独立调度执行。

一个进程崩溃,并不会影响其他的进程,这也很好理解,因为进程是一个个独立运行的程序,彼此独立,就像是不同行业的工厂,一个倒闭,其余的并不受影响,而线程不然,一个流水线的加工出现问题,那么整个工厂生产的产品都会受到影响,进而整个工厂倒闭。

1.协程
协程不是计算机提供,程序员人为创造。
协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。比线程更加轻量级,一个线程也可以拥有多个协程。


实现协程有这么几种方法:

greenlet,早期模块

yield关键字

asyncio装饰器(python3.4及以后,但3.8后被弃用)

async&await关键字(python3.5及以后)(推荐方法)

现在常用greenlet和async&await关键字

greenlet实现协程

from greenlet import greenlet

def func1():
    print(1)
    gr2.switch()             #切换到func2函数
    print(2)
    gr2.switch()

def func2():
    print(3)
    gr1.switch()             #切换到func1函数
    print(4)

gr1 = greenlet(func1)         
gr2 = greenlet(func2)

gr1.switch()                  #先执行func1


#输出结果:1、3、2、4

yield关键字实现协程

def func1():
    yield 1
    yield from func2()      #切换到func2
    yield 2

def func2():
    yield 3
    yield 4

f1 = func1()
for item in f1:
    print(item)

#输出结果:1、3、4、2

async&await实现协程

import asyncio

async def func1():
    print(1)
    await asyncio.sleep(1)      #遇到IO耗时操作,自动切换到tasks的其他任务中
    print(2)

async def func2():
    print(3)
    await asyncio.sleep(1)      #遇到IO耗时操作,自动切换到tasks的其他任务中
    print(4)

tasks = [asyncio.ensure_future(func1()),asyncio.ensure_future(func2())]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

#输出结果:1、3、2、4

原理是导入asyncio模块,之后将定义好的多个函数传到asyncio.ensure_future()的参数中,然后将他们封装在一个任务列表中,然后调用这个任务列表。

这个协程的巧妙之处在于遇到阻塞操作时可以自动切换任务,假如分别在func1的print(1)语句、func2的print(3)语句后面均加上一个下载图片(假设图片下载时间为1秒)的网络IO请求,那么这段代码执行时,会先打印1,然后发送第一个下载请求,由于阻塞,会自动切换到func2中,打印3,然后再次发送第二个打印请求,此时经过1秒钟,图片1、2均下载完成,相比单线程操作节省了1秒钟!!

这样做在于充分压榨单线程的时间,达到多线程的效果,弊端是会频繁访问,加大了ip被封掉的可能性,所以需要ip伪装

协程的意义:在一个线程中如果遇到IO等待时间,线程不会傻等,而是去干点别的事。

Android Input——输入事件ANR执行(十六) 上一篇文章我们介绍了输入事件 ANR 的触发流程,这里我们再来看一下输入事件 ANR的执行流程。 阅读详情

相关推荐

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7009

自学python Day2-python爬虫1 - 2018.4.29

前言:没办法。。刚装完python和django就要学爬虫了,打算一边照猫画虎写爬虫,一边回头补python语言。搜了一圈知乎,觉得有一篇文章比较全面,开整!学习根据资料:Python3.x爬虫学习资料整理  https://zhuanlan.zhihu.com/p/24358829同时又要到了公司的爬虫产品的几句技术栈描述,打算结合知乎这篇文章和公司技术栈来写第一章  用Python 3开发网络...

deo_ares的博客 607

Appsflyer Web2App实战指南:OneLink与Web SDK深度对比

本文深入对比了Appsflyer实现Web2App的两大核心工具:OneLink智能链接与Web SDK。OneLink提供开箱即用的智能跳转,部署快捷,适合快速推广;Web SDK则支持高度自定义的用户行为追踪,适合深度分析与精细化运营。文章提供了详细的配置指南、场景化选型建议及实战避坑技巧,帮助营销与开发团队根据自身需求选择最佳方案,有效提升从网页到应用的转化率与归因精度。

weixin_29213655的博客 458

零基础小白,30天入门Python爬虫的学习纲要

Day29:复盘完整项目从需求分析到部署的全流程回顾常见问题排查(如403错误、验证码)Day30:扩展学习方向移动端爬虫(Appium)爬虫法律与道德规范。

老韩的Linux云计算架构师进阶之路 1485

Prokka实战:10分钟搞定细菌基因组注释(附详细参数解析)

本文深入解析Prokka细菌基因组注释工具的核心参数与实战策略。通过拆解其集成化工作流程,详细解读物种分类、功能注释、输出控制等关键参数,并提供快速初筛、高质量发表、质粒注释及批量处理四种典型场景的高效参数组合方案,帮助用户精准掌控注释过程,将原始序列转化为有价值的生物学见解。

weixin_29271053的博客 442

YOLO11实战优化:长尾分布解决 | 引入Seesaw Loss配合YOLO11分类头,完美应对类别极其不平衡的现实业务场景

摘要: YOLO11在工业缺陷检测等长尾分布场景中面临尾部类别检测失效的问题,根源在于头部类别样本的负样本梯度压制了尾部类别的学习。传统方法如重采样、Focal Loss等效果有限。Seesaw Loss通过动态调整缓解因子和补偿因子,平衡类别间的梯度分布,结合YOLO11的解耦分类头、Anchor-Free设计和C2PSA/C3K2模块,显著提升尾部类别识别能力。文章详细解析了Seesaw Loss的数学原理,并提供了可直接集成到YOLO11的PyTorch实现代码,为长尾分布下的目标检测提供了实用解决方

2601_95807009的博客 253

python网络爬虫进阶day01

  2019.5.23,今天学习了selenium+chromedriver获取动态数据: selenium相当于是一个机器人一样,可以模拟人的行为,例如:点击,填充数据,翻页等。chromedriver是驱动Chrome浏览器的一个驱动程序。必须通过chromedriver才能得到一个driver,爬虫才能模拟人的行为。 1 # Author:K 2 from seleni...

weixin_30346033的博客 288

【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

简介QDM原理及其MATLAB代码实现

WW、forever的博客 5861

python网络爬虫基础day02

  2019.5.15,今天继续跟着波波老师学习爬虫开发。主要学了数据解析,总结今天学的知识: 聚焦爬虫:爬取页面中指定的页面内容。 -编码流程: - 指定urL发起请求 - 获取响应数据 - 数据解析 - 持久化存储数据解析分类: - 正则 - bs4 - xpath(重点)数据解析原理概述: - 解析的局部...

weixin_30410999的博客 259

CCAR-23《正常类飞机适航规定》和CCAR-25《运输类飞机适航规定》差异分析

通过详细比较CCAR-23和CCAR-25在适用范围、设计标准、性能要求、运行限制、安全冗余和环境适应性方面的差异,我们可以看出,CCAR-23适用于轻型飞机,开发和运营成本较低,设计要求相对简单。而CCAR-25适用于大规模运输飞机,设计、开发、测试和运营管理都需要更高的复杂性和投入。

qq_41854911的博客 3706

CUDA编程00 - 配置CUDA开发环境

第一步:在一台装有Nvidia显卡和驱动的机器上,用nvidia-smi命令查看显卡所支持cuda版本。安装时按提示下一步即可,安装完成用 nvcc -V 命令检查是否成功。第二步: 到Nvidia官网下载CUDA Toolkit并安装,第三步:编写HelloWorld。

GPU全栈博主 1359

python爬虫 pdf 尹成_清华学霸尹成.python.爬虫教程

资源内容:清华学霸尹成.python.爬虫教程|____清华学霸.尹成大神.day9.zip|____清华学霸.尹成大神.day8.zip|____清华学霸.尹成大神.day7.zip|____清华学霸.尹成大神.day6.zip|____清华学霸.尹成大神.day51.zip|____清华学霸.尹成大神.day50.zip|____清华学霸.尹成大神.day5.zip|____清华学霸.尹成大神...

weixin_39965102的博客 192

glibc: GLIBC_2.28‘ not found

这个时候,应该怎么解决,因为当前运行的机器是低版本,而程序是高版本,解决方法,或者是将程序降级,或者将当前系统升级。在一个glibc的接口版本是GLIBC_2.25的lab上,运行不了在2.28上编译的程序。看哪一个方便,但是不能通过 临时复制libc.so 文件来解决,因为会遇到下面的错误。所以如果是简单解决就是按照低版本的应用程序,来适配当前系统的glibc版本。比如下面的程序运行提示。

mzhan017的博客 2405

视频教程-清华-尹成老师-Python爬虫day29-Python

清华-尹成老师-Python爬虫day29 毕业于清华大学,曾担任Googl...

weixin_32005397的博客 178

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

python网络爬虫进阶day02-12306抢票

  2019.5.25,今天用selenium+chromedriver做了一个12306抢票小爬虫,总共100+行代码,写的真费劲,看来还是没学到家,话不多说,首先看一下README: 12306抢票功能: 通过手动登录,手动填写出发地,目的地,出发日期,然后自动完成抢票程序流程: - 1、首先进入登录界面(logging_page),然后等待用户登录。 - 2、在登录...

weixin_30319153的博客 270

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

爬虫学习-day5-rkAndXpath总结

【代码】爬虫学习-day5-rkAndXpath总结。

qq_54073138的博客 671

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

爬虫学习Day_01

爬虫urlib库,request库,简易反反爬,抓包工具

wuliwavv的博客 1682

Python网络爬虫(Day03-1)

Python网络爬虫(Day03-1) 缓存知乎发现上的链接和页面代码—进阶 from hashlib import sha1 from urllib.parse import urljoin import pickle import re import requests import zlib from bs4 import BeautifulSoup from redis im...

萌亖的博客 1012

python网络爬虫基础day03

  2019.5.17,不知不觉搞到这个点了。搞得有点晚,总结一下就睡觉: 今天主要学了验证码识别和requests模块高级操作: 验证码识别  验证码和爬虫之间的爱恨情仇?  反爬机制:验证码。识别验证码图片中的数据,用于模拟登陆操作。  识别验证码的操作:    - 人工肉眼识别。(不推荐)    - 第三方自动识别(推荐)    - 云打码:http://www.yu...

weixin_30699955的博客 132

精通python网络爬虫之自动爬取网页的爬虫 代码记录

items的编写 1 # -*- coding: utf-8 -*- 2 3 # Define here the models for your scraped items 4 # 5 # See documentation in: 6 # https://doc.scrapy.org/en/latest/topics/items.html 7 8 im...

weixin_30697239的博客 162

Python爬虫学习笔记_DAY_29_Python爬虫之scrapy框架项目结构与基本语法详细介绍【Python爬虫】

p.s.高产量博主,点个关注不迷路 目录 I.scrapy框架的项目结构 II.robots协议 III.scrapy框架的基本语法介绍 I.scrapy框架的项目结构 承接上一篇笔记,开始学习scrapy框架的项目结构: 首先,我们可以先新建一个scrapy的项目(这里以获取58同城网页数据为例): 我们先打开终端,cd指令进入上一篇笔记新建的文件夹中(或者任意新建一个空的文件夹也可以),在这个文件夹下,我们运行项目创建指令,创建新的项目: 输入scrapy项目创建指令: .

跳探戈的小龙虾的博客 1414

day5 反爬虫和Xpath语法

day5 反爬虫和Xpath语法总结

sjc20230207的博客 1368

【Python网络爬虫四】通过关键字爬取多张百度图片的图片

最近看了女神的新剧《逃避虽然可耻但有用》,同样男主也是一名程序员,所以很有共鸣 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片。 百度搜索结果:新恒结衣 本文主要分为4个部分:   1.下载简单页面   2.爬取多张图片   3.页面解码   4.爬取过程排错处理 1.下载简单页面 通过查看网页的html源码,分析得出,同一张图片共有4种链接: ...

883

爬虫day1总结

爬虫day1总结 一、虚拟环境 1.python系统环境 安装python就是为了计算机提供运行python程序的环境(这个环境叫做系统环境) 一个python环境中包含python解释器和已经安装过的所有第三方库。 2.虚拟环境 基于系统环境创建的其他的python环境 如果没有虚拟环境只有一个系统环境,那么所有的第三方库就只能放在一起,这样容易突出,而且无法保存同一个第三方库的多个版本。 如果使用虚拟环境就可以让不同类型或者不同相同拥有自己专属的运行环境。 3.新建虚拟环境 1)用pycharm新建虚拟

m0_66021454的博客 397
上一篇: 第五周——爬虫入门 Day4 7.28
下一篇: 第六周——爬虫入门 Day1 8.1
FancySYZ
博客等级 码龄4年 2粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值