【Python网络蜘蛛】基础 - 多线程和多进程的基本原理

2023-11-11

多线程和多进程的基本原理


在编写爬虫程序的时候,为了提高爬取效率,我们可能会同时运行多个爬虫任务,其中同样涉及多进程和多线程。

多线程的含义

先了解一下进程:

进程可以理解为一个可以独立运行的程序单位。例如打开一个浏览器.就开启了一个浏览器进程。在一个进程中,可以同时处理很多事情,例如看视频、听音乐、放动画,这些任务可以同时运行,互不干扰。其实一个任务就对应一个线程

进程是线程的集合,线程是操作系统进行运算调度的最小单位,是进程中的最小运行单元。

并发和并行

  • 并发:指多个线程对应的多条指令被快速轮换地执行。
  • 并行:指同一时刻有多条指令在多个处理器上同时执行,这意味着并行必须依赖多个处理器。

Python中的多线程和多进程

Python中 GIL的限制导致不论是在单核还是多核条件下,同一时刻都只能运行一个线程,这使得Python多线程无法发挥多核并行的优势。

GIL全称为Global Interpreter Lock,意思是全局解释器锁,具议计之初定山丁对效据安全的考虑在 Python多线程下,每个线程的执行方式分如下三步:

  • 获取GIL。
  • 执行对应线程的代码。
  • 释放GIL。

某个线程想要执行,必须先拿到GIL,并且在Python进程中,GIL只有一个。线程拿不到GIL就不允许执行。

对于多进程来说,每个进程都有属于自己GIL,所以在多核处理器下,多进程的运行是不会受GIL影响的。即多进程能更好的发挥多核优势。

注意:由于进程是系统进行资源分配和调度的一个独立单位,所以各进程之间的数据是无法共享的,如多个进程无法共享一个全局变量,进程之间的数据共享需要由单独的机制来实现。

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

【Python网络蜘蛛】基础 - 多线程和多进程的基本原理 的相关文章

  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • 即使页面未完全加载,我们也可以使用 Selenium 获取页面源吗(TimeoutException: Message: timeout)?

    即使遇到 TimeoutException Message timeout 也能获取页面源码吗 当我调用 driver page source 时 有时无法加载整页 但我只需要它的部分信息 尚未确定 所以我只想在任何情况下保存页面 是否可以
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 如何将回溯/sys.exc_info() 值保存在变量中?

    我想将错误名称和回溯详细信息保存到变量中 这是我的尝试 import sys try try print x except Exception ex raise NameError except Exception er print 0 s
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X

随机推荐

  • 华为OD机试 - 玩牌高手(Java)

    题目描述 给定一个长度为n的整型数组 表示一个选手在n轮内可选择的牌面分数 选手基于规则选牌 请计算所有轮结束后其可以获得的最高总分数 选择规则如下 在每轮里选手可以选择获取该轮牌面 则其总分数加上该轮牌面分数 为其新的总分数 选手也可不选
  • 多传感器融合之雷达图像数据集自动生成 - 20220613

    文章目录 Automatic Radar Camera Dataset Generation for Sensor Fusion Applications 1 Radar Camera Co Calibration 2 ROS pipeli
  • 集成第三方单点登录JIRA(Colfluence同理)

    jira单点登录原理 jira单点登录依赖于seraph插件 在searph的配置文件中引入我们自定义的验证类 类似一个过滤器 jira登录时会解析代码中的逻辑 具体内部实现逻辑自己定义 如header token cookie等等形式 j
  • 获取单选框选中值提交到数据库

    获取单选框选中值提交到数据库 开发工具与关键技术 VS2015 ASP NET MVC 撰写时间 2019 08 08 先说明一下我这两个单选框的作用 就比如说我做的这个是一个商品单位的属性 是允许小数或者不允许小数的 比如手机是一台的 台
  • 公司招人,面了一个5年经验不会自动化的测试人,他凭什么要18K?

    在深圳这家金融公司也待了几年 被别人面试过也面试过别人 大大小小的事情也见识不少 今天又是团面的一天 一百多个人都聚集在一起 因为公司最近在谈项目出来面试就2个人 无奈又被叫到面试房间 整个过程我都是非常认真负责的 不管是有经验的还是没经验
  • 自学之Python常用库——logging

    logging库日志级别 默认的级别是warning 级别 级别数值 使用时机 DEBUG 10 详细信息 常用语调试 INFO 20 程序正常运行过程中产生的一些信息 WARNING 30 警告用户 虽然程序还在正常工作但有可能发生错误
  • ch340非一键下载电路烧录esp8266程序

    esp8266 ch340非一键下载电路烧录问题的解决 前些天对智能家居很感兴趣 在网上看了一些关于esp8266的开发视频后 就从淘宝入手了一些小玩意儿 原先以为用ch340就可以实现esp8266一键下载呢 事实上却没有那么简单 笔者受
  • flutter报错记录:java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector

    在一天新电脑上运行flutter项目时 项目一直跑不起来 详细的报错内容 java lang illegalaccesserror class org gradle internal compiler java classnamecolle
  • 原生js的e.target.closest()方法

    closest 方法 首先检查当前元素是否匹配 如果匹配则直接返回当前元素本身 如果不匹配则沿着dom树一层一层向上查找祖先元素 直到找到匹配的祖先元素为止 如果都不不匹配则返回空null 用法 比如 有一个ul列表 当点击ul里面的内容时
  • cmake can not determine linker.....

    目录结构如下 a hpp CMakeLists txt 内容如下 add library a a hpp 编译该目录 报上面的错误 cmake实际需要有 cpp的文件才能单独编译 只有hpp不行 但是如果加上链接库也是可以的 上面的内容加上
  • 嵌入式软件开发

  • vue element checkbox多选框 多组联动数据嵌套多选、单选实际应用

    先看我最近项目中要实现的功能 点击 干部管理组 员工管理组 与下属员工复选框实现联动 后台返回的数据结构大概是这样的 title 干部 rows id 1 name 张三 id 2 name 张四 title 员工 rows id 3 na
  • bean的生命周期分析(三)

    目录 二 全流程梳理 2 6 创建bean 2 6 1 createBean 2 6 2 resolveBeanClass 2 6 3 prepareMethodOverrides 2 6 4 resolveBeforeInstantiat
  • 【闲谈】对于华为提出的“端云协同”渲染模式的一些看法

    本帖的主要内容 是发表一些对于华为 端云协同 的顾虑 端云协同是好事 我们本地算力可以云化 本地近乎走瘦终端路线 但这就会引发问题 这将大大增加运营商的网络传输流量业务 所以宽带套餐应该会又有变革 那不得不说一些现实点的状况 一 家用宽带可
  • sqli-labs:less-28(过滤了union和select)

    div div
  • C++——#ifndef和#ifdef宏定义的使用及作用介绍

    建议结合以下博客理解 头文件重复引用 https blog csdn net shenlanzifa article details 21071443 ifndef和 ifdef都是一种宏定义判断 作用是防止多重定义 ifndef是if n
  • element-plus 表单验证

    表单验证是使用率比较高的 和之前element版本也有些差别
  • 科技风UI除了蓝色,还有什么配色选择?

    今年做了一年的科技风 看到蓝色也是甚是觉得审美疲劳 在同类产品中体现出差异性也比较困难 寻思着除了蓝色 就没有别的配色选择了吗 通过对科技类设计的搜集 总结了科技风产品的配色文章参考 尽管我今年对蓝色够够了 但还是要分析下它作为FUI首选配
  • windows下,unity项目突然无法打开的挽救办法

    情景 项目在某次关机后就再也无法通过unity正常打开了 换了机器和unity版本也依然不行 如果你没做存档想必这是个令人非常崩溃的事情 但还有一种挽救的办法 至少是一种可能挽救的办法 那就是使用其他平台的unity打开项目 unity有w
  • 【Python网络蜘蛛】基础 - 多线程和多进程的基本原理

    文章目录 多线程和多进程的基本原理 多线程的含义 并发和并行 Python中的多线程和多进程 多线程和多进程的基本原理 在编写爬虫程序的时候 为了提高爬取效率 我们可能会同时运行多个爬虫任务 其中同样涉及多进程和多线程 多线程的含义 先了解