Python爬虫——多线程(一)

2023-10-31

Python爬虫——多线程(一)



一、多线程概述

多进程

pycharm 腾讯课堂 浏览器
n个cpu核心 可以同时执行多个任务

多线程

线程 进程中的执行单位就是线程(进程中所包含的执行单位就是线程)
一个进程可以包含多个线程

在python中 实际上一次只能执行一个线程
存在线程锁 用来解决资源竞争的问题

用多线程爬虫的优势?

主要用来解决效率问题
I/O操作 input onput 网络IO 磁盘IO

需要把多线程需要完成的工作写入到事件函数中
可以同时进行多个线程的事件

二、多线程的创建

1.通过函数创建

import threading
import time


def demo():
    # 线程的事件函数
    print('子线程')


if __name__ == '__main__':
    # target用来传函数 函数名后面不能跟括号
    # threading.Thread(target=demo())
    for i in range(5):
        t = threading.Thread(target=demo())  # target用来接收函数事件的 args=()用来传参的
        # 启动(给一个可以启动的状态)
        t.start()

2.类创建多线程

import threading
import time


# 通过类创建多线程
# 自定义的MyThread类需要继承父类 threading.Thread
class MyThread(threading.Thread):
    # def run(self) -> None 表示run函数的返回值为空
    def run(self) -> None:
        for i in range(5):
            print('子线程')


if __name__ == '__main__':
    m = MyThread()
    # m.run() 是一个简单的方法调用
    # m.run()
    m.start()

线程锁

利用线程锁解决资源竞争问题
得先找到可能会出现资源竞争问题得地方找到之后给这个可能得地方上把

上锁要记得解锁不然可能会导致资源竞争的问题
队列存放我们待爬取的url

threading.lock()

创建锁

threading.Rlock()

创建锁,可以多个上锁

import threading
import time

# threading.enumerate()

# 创建锁
# lock = threading.Lock()
# 可以上多把锁,上了几把锁就需要解几把锁
lock = threading.RLock()
num = 100


def demo1(nums):
    global num
    lock.acquire()  # 上锁
    lock.acquire()
    for i in range(nums):
        num += 1
    lock.release()
    lock.release()  # 解锁
    print('demo1--{}'.format(num))


def demo2(nums):
    global num
    lock.acquire()
    for i in range(nums):
        num += 1
    lock.release()
    print('demo2--{}'.format(num))


def main():
    # 传递函数事件
    # args 用来传参的 传递的是元组 哪怕只传递一个参数 后面也要有逗号
    t1 = threading.Thread(target=demo1, args=(1000000,))
    t2 = threading.Thread(target=demo2, args=(1000000,))

    t1.start()
    t2.start()

    time.sleep(3)

    print('main--{}'.format(num))


if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫——多线程(一) 的相关文章

  • 在numpy中,[:,None]选择有什么作用?

    我正在学习 Udacity 的深度学习课程 我遇到了以下代码 def reformat dataset labels dataset dataset reshape 1 image size image size astype np flo
  • 如何分组显示argparse子命令?

    对于具有许多子命令的程序 我想在 help 输出中显示它们按逻辑分组 Python argparse 有一个add argument group http docs python org library argparse html argp
  • Python 中的自然日/相对日

    我想要一种在 Python 中显示日期项目的自然时间的方法 类似于 Twitter 将显示 刚才 几分钟前 两小时前 三天前 等消息 Django 1 0 在 django contrib 中有一个 人性化 方法 我没有使用 Django
  • Pandas系列矢量化文本处理

    我想使用矢量化操作改进我的 Pandas 代码 假设我有一个简单的 DataFrame 其中有一个文本列 其中可能包含 url Column1 0 hello http www google com 1 bye www mail com w
  • 在 Flask 中将配置文件作为字典读取

    在 instance app cfg 我已经配置 test test 在我的烧瓶文件 app py 中 with app open instance resource app cfg as f config f read print con
  • 字典键中的通配符

    假设我有一本字典 rank dict V 1 A 2 V 3 A 4 正如您所看到的 我在一个 V 的末尾添加了一个 虽然 3 可能只是 V 的值 但我想要 V1 V2 V2234432 等的另一个密钥 我想检查它 checker V30
  • 带剖面的 3D 曲面图

    基本上 我有一个由一组时间序列组成的曲面图 我想在特定高度添加剖面图 以更好地了解一年中值高于所选阈值的时期 由此 其中显示平面但不是剖面 To This 有什么建议吗 使用 alpha 和相机仰角并没有解决问题 平面似乎仍然在人物的前面
  • 使用 Python 将 Json 转换为换行 Json 标准

    我有一个获取嵌套对象并删除所有嵌套的代码 使对象平坦 def flatten json y param y Unflated Json return Flated Json out def flatten x name if type x
  • 使用字符串迭代 url - python

    我现在完全被我的代码困住了 首先 我尝试从 volkskrant 的存档页面检索所有网址 这是我被打击的第一步 某一特定日期的 url 如下所示 http www volkskrant nl archief detail 01012016
  • django 密码重置功能中出现 NoReverseMatch 错误

    我正在尝试在 django 中实现密码重置功能 下面是我的代码 urls py urlpatterns patterns url r signup accounts views signup name signup email url r
  • .NET 是否有相当于 Python 中的 **kwargs 的功能?

    我一直无法通过典型渠道找到这个问题的答案 在Python中我可以有以下函数定义 def do the needful kwargs Kwargs is now a dictionary i e do the needful spam 42
  • 从 SQL 数据库导入表并按日期过滤行时,将 Pandas 列解析为日期时间

    我有一个DataFrame列名为date 我们如何将 日期 列转换 解析为DateTime object 我使用 Postgresql 数据库加载日期列sql read frame 的一个例子date列是2013 04 04 我想做的是选择
  • 有没有比 ` except: pass` 更简洁的替代方案?

    我有一个函数 可以按偏好顺序返回多个组的随机成员 事情是这样的 def get random foo or bar I d rather have a foo than a bar if there are foos return get
  • python 3 configparser.read() 在给定不存在的文件时不会引发异常

    当我尝试使用 configparser read 读取不存在的文件时 我认为它应该引发异常 事实并非如此 它返回一个空列表 显然 我可以测试空列表并引发异常 在我看来 如果 configparser read 引发 FileNotFound
  • Python 正则表达式中的 \B+ 与 [\B]+ 与 [^\b]+

    我在回答 SO 问题时遇到了一个我不明白的问题 我创建了一个简化的示例来说明该问题 场景 我正在测试两个标记 不是随机的英语单词 在字符串中至少相距一定距离 在这个例子中 我们有一个动物列表 我们要确保在羊和狼之间至少还有其他三种动物 否则
  • 如何导入 boto3 ssm ParameterNotFound 异常?

    我想import the exception当一个boto3 ssm找不到参数get parameter 我正在尝试添加一些额外的内容ssm的功能moto图书馆 但我现在很困惑 gt gt gt import boto3 gt gt gt
  • 为什么使用 LAMP 托管时避免使用 CGI for Python?

    我已经使用 PHP 多年了 最近我在论坛上看到很多帖子说PHP 已经过时了 现代编程语言更简单 更安全等等 所以 我决定开始学习Python 由于我习惯使用 PHP 因此我刚刚开始通过上传 htaccess 文件来构建页面 addtype
  • 使用 pandas 中的正则表达式在另一列中查找一列中的值

    我有一个包含两列字符串的 pandas 数据框 我想识别第一列中字符串的所有行 s1 出现在第二列 s2 所以如果我的专栏是 abc abcd ef gh z1y xxyyzz 我想保留第一行 但不想保留第二行 我能想到的唯一方法是 迭代数
  • Python DNS服务器IP地址查询

    我正在尝试使用 python 获取 DNS 服务器 IP 地址 要在 Windows 命令提示符下执行此操作 我将使用 ipconfig 全部 如下所示 我想使用 python 脚本做同样的事情 有什么方法可以提取这些值吗 我成功提取了设备
  • 我可以在某些网格中打印带有颜色的 pandas 数据框吗?

    我有一个 pandas DataFrame 我想突出显示一些数据 例如 In 1 import pandas as pd In 2 import numpy as np In 3 df pd DataFrame np reshape ran

随机推荐

  • mysql8查看用户密码_mysql8用户管理

    查看当前登录用户 创建用户 create user 用户名 主机地址 identified with mysql native password by 密码 修改密码 alter user 用户名 主机地址 identified with
  • cnocr避坑指南

    今天用我的win7电脑运行我的一个python程序 让我安装cnocr 于是我就pip install cnocr 安装成功 继续运行 却出现mxnet的问题 一堆它的 dll文件没有 反复卸载重装 没得救 看了一个文章 也是这个问题 就想
  • Java教程:如何读取服务器文件并推送到前端并下载,图片格式以浏览器渲染模式

    起因 在我们做文件上传时 通常会保存文件的相对路径在数据库中 然后返回前端http访问路径 来对文件进行下载或图片预览功能 但是有时候我们并不想直接返回文件访问地址给前端 这就用到了Java当中的文件输入输出流 将文件以流的方式响应给浏览器
  • 【C语言】详解qsort函数使用和模拟实现

    一 qsort函数的使用 qsort的功能 qsort函数是C语言标准提供的排序函数 使用qsort函数需要引用头文件 include
  • h5 video方法,事件,属性详解

    闲下来的的时间里 我一直总结之前学习过的知识 今天到video 发现对它还是不够熟悉 于是重新学习一遍 举个例子
  • [云原生专题-37]:K8S - 核心概念 - 存储抽象- 搭建NFS网络文件系统与常见操作命令

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122828322 目录 第1步 NFS
  • 怎样用python通达信接口写一个股票自动买卖的程序?

    方法一 前期的数据抓取和分析python都写好了 所以就差交易指令接口了 对于散户投资者来说 正规的法子是愿意给接口的券商 但是需要很高的开户费 而且只有lts ctp这样的c 接口 没有python版就需要用户自己去封装 方法二 wind
  • js抽奖(随机抽奖

    js抽奖 随机抽奖 默认抽奖结果 效果示例图 代码块 效果示例图 代码块
  • R语言函数

    R语言实际上是函数的集合 用户可以使用base stats等包中的基本函数 也可以自己编写函数完成一定的功能 但是初学者往往认为编写R函数十分困难 或者难以理解 这里对如何编写R函数进行简要的介绍 函数是对一些程序语句的封装 换句话说 编写
  • 乐高机器人投篮编程_乐高机器人WeDo编程和EV3编程课能学到什么

    乐高机器人WeDo编程和EV3编程课能学到什么 智能机器人WeDo编程课能学点啥 智能机器人WeDo编程 游戏乐园 适合年龄 一年级至二年级 课程简介 设计搭建复杂机器人 运行编程程序 感受机械运动的神奇 完成一个星际战机主题的机器人搭建及
  • 区块链与物联网的结合应用

    最近一个新闻 IBM中国研究院全面关闭 个人技术公众号 解决方案工程师 欢迎同领域的朋友关注 相互交流 最近一个新闻 IBM中国研究院全面关闭 原因也是多方面的 其中 新闻中这句话我倒是十分感兴趣 2014年初 IBM中国研究院提出了 物联
  • Qt学习七——qcustomplot(1)

    好久没有更新了 把最近学习到的东西做一个简单的总结 一 qcustomplot是什么 在没有接触qt之前 各种奇怪的图到底怎么画出来的还是觉得很厉害的 但是当你拥有了qcustomplot 你就拥有了整个世界 可以说qcustomplot算
  • arthas启动-服务端启动流程

    从前面介绍的arthas启动 agent初始化一文中我们看到了AgentBootstrap bind函数 该函数的实现就是使用反射创建一个ArthasBootstrap对象 传入关键信息Instrumentation 以及启动参数 我们就关
  • 三太子敖丙-帅丙的文章目录

    三太子敖丙 帅丙的文章目录
  • [蓝桥杯2022初赛] 消除游戏

    题目 来源 P2045 蓝桥杯2022初赛 消除游戏 New Online Judge ecustacm cn 分析 首先 可以明确一件事情 不管怎么删除 都要在遍历完字符串后在删除 然后 新生成的字符串再进行重复操作 题目中虽然给了次数
  • 使用MATLAB将Excel里面的数据导入,并且将MATLAB数据导入到Excel里面的命令介绍

    系列文章目录 Matlab中求解线性方程组 高斯消元法 LU分解法 QR分解法 SVD分解法 迭代法等 MATLAB迭代的三种方式以及相关案例举例 MATLAB矩阵的分解函数与案例举例 MATLAB当中线性方程组 不定方程组 奇异方程组 超
  • docker部署LTC v0.18.1版本开发网

    文章目录 一 LTC镜像生成 二 LTC容器生成 三 查看bsv服务是否部署成功 四 常用接口使用 昨天部署了比特现金开发网节点 今天做个莱特币的开发网试试 一 LTC镜像生成 1 下载基础镜像 docker pull buildpack
  • 初识Linux下的gcc与makefile

    推荐文章 https blog csdn net chenlong cxy article details 119183448 最近在学linux相关的操作 接触到makefile文件 在此做个笔记 文章目录 gcc 1 预处理 2 编译
  • sublime json美化

    sublime 的插件 json美化感觉很难用 好多正常的json串都 不能正常解析 自己写了一个json解析插件 此插件跟网上教程的json美化插件 不同的是 只对json的特殊字符进行格式化 这种不是很严格但是正好解决了我的问题 我工作
  • Python爬虫——多线程(一)

    Python爬虫 多线程 一 文章目录 Python爬虫 多线程 一 一 多线程概述 多进程 多线程 用多线程爬虫的优势 二 多线程的创建 1 通过函数创建 2 类创建多线程 线程锁 一 多线程概述 多进程 pycharm 腾讯课堂 浏览器