0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文理解python模块的缓存

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-14 16:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块时,它会先检索 sys.modules 里是否已经载入这个模块了,如果已经载入,则不会再次导入,如果不存在,才会去检索导入这个模块。

来实验一下,在 my_mod02 这个模块里,我 import 两次 my_mod01 这个模块,按逻辑每一次 import 会一次 my_mod01 里的代码(即打印 in mod01),但是验证结果是,只打印了一次。

$ cat my_mod01.py
print('in mod01')

$ cat my_mod02.py
import my_mod01
import my_mod01

$ python my_mod02.py
in mod01

该现象的解释是:因为有 sys.modules 的存在。

sys.modules 是一个字典(key:模块名,value:模块对象),它存放着在当前 namespace 所有已经导入的模块对象。

# test_module.py

import sys
print(sys.modules.get('json', 'NotFound'))

import json
print(sys.modules.get('json', 'NotFound'))

运行结果如下,可见在 导入后 json 模块后,sys.modules 才有了 json 模块的对象。

$ python test_module.py
NotFound

由于有缓存的存在,使得我们无法重新载入一个模块。

但若你想反其道行之,可以借助 importlib 这个神奇的库来实现。事实也确实有此场景,比如在代码调试中,在发现代码有异常并修改后,我们通常要重启服务再次载入程序。这时候,若有了模块重载,就无比方便了,修改完代码后也无需服务的重启,就能继续调试。

还是以上面的例子来理解,my_mod02.py 改写成如下

# my_mod02.py

import importlib
import my_mod01
importlib.reload(my_mod01)

与上面不同的是,这边执行了两次 my_mod01.py

$ python3 my_mod02.py
in mod01
in mod01

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2822

    浏览量

    52814
  • 缓存
    +关注

    关注

    1

    文章

    248

    浏览量

    27650
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89600
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电能表会 “爆表” 吗?机械 / 家用 / 快充桩场景的计量真相拆解

    文理清:为何家用电表难 “爆表”,快充桩却会?
    的头像 发表于 11-12 09:25 928次阅读
    电能表会 “爆表” 吗?机械 / 家用 / 快充桩场景的计量真相拆解

    文理解模数转换器中的有效位数

    随着测量精度要求提升,有效位数(ENOB)已成为评估ADC、数字示波器真实性能的核心指标。ENOB由IEEE定义,综合了噪声、抖动、非线性失真等误差,反映设备在实际使用中的“有效分辨率”。
    的头像 发表于 10-09 11:01 2778次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文理解</b>模数转换器中的有效位数

    详解xilinx 7系列FPGA配置技巧

    本文旨在通过讲解不同模式的原理图连接方式,进而配置用到引脚的含义(手册上相关引脚含义有四、五页,通过本文理解基本上能够记住所有引脚含义以及使用场景),熟悉xilinx 7系列配置流程,以及设计原理图时需要注意的些事项,比如flash与FPGA的上电时序。
    的头像 发表于 08-30 14:35 8963次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>详解xilinx 7系列FPGA配置技巧

    缓存之美:万详解 Caffeine 实现原理(上)

    文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍,首先会讲解它的实现原理,在大家对它有个概念之后再深入具体源码的细节之中,理解它的设计理念,从中能学习到
    的头像 发表于 08-05 14:49 526次阅读
    <b class='flag-5'>缓存</b>之美:万<b class='flag-5'>文</b>详解 Caffeine 实现原理(上)

    高性能缓存设计:如何解决缓存伪共享问题

    在多核高并发场景下, 缓存伪共享(False Sharing) 是导致性能骤降的“隐形杀手”。当不同线程频繁修改同缓存行(Cache Line)中的独立变量时,CPU缓存
    的头像 发表于 07-01 15:01 511次阅读
    高性能<b class='flag-5'>缓存</b>设计:如何解决<b class='flag-5'>缓存</b>伪共享问题

    由 Mybatis 源码畅谈软件设计(八):从根上理解 Mybatis 二级缓存

    1. 验证二级缓存 在上篇帖子中的 User 和 Department 实体类依然要用,这里就不再赘述了,要启用二级缓存,需要在 Mapper.xml 文件中指定 cache 标签,如下
    的头像 发表于 06-23 11:35 328次阅读
    由 Mybatis 源码畅谈软件设计(八):从根上<b class='flag-5'>理解</b> Mybatis 二级<b class='flag-5'>缓存</b>

    MCU缓存设计

    MCU 设计通过优化指令与数据的访问效率,显著提升系统性能并降低功耗,其核心架构与实现策略如下: 缓存类型与结构 指令缓存(I-Cache)与数据缓存(D-Cache)‌ I-Ca
    的头像 发表于 05-07 15:29 847次阅读

    Nginx缓存配置详解

    Nginx 是个功能强大的 Web 服务器和反向代理服务器,它可以用于实现静态内容的缓存缓存可以分为客户端缓存和服务端缓存
    的头像 发表于 05-07 14:03 1048次阅读
    Nginx<b class='flag-5'>缓存</b>配置详解

    nginx中强缓存和协商缓存介绍

    缓存直接告诉浏览器:在缓存过期前,无需与服务器通信,直接使用本地缓存
    的头像 发表于 04-01 16:01 744次阅读

    运行OVModelForCausalLM Python模块时出错了,怎么解决?

    创建了个自定义 Python* 代码,类似于遵循 240-dolly-2-instruction 的 Jupyter 笔记本。 OVModelForCausalLM Python*
    发表于 03-05 06:44

    缓存与不带缓存的固态硬盘有什么区别

    延迟、高可靠性和低噪音等优点,逐渐取代了传统的机械硬盘,成为市场的主流选择。而固态硬盘中的缓存技术,更是提升其性能的关键因素之。本文将深入探讨固态硬盘的定义、结构、工作原理,以及带缓存与不带
    的头像 发表于 02-06 16:35 4309次阅读

    HTTP缓存头的使用 本地缓存与远程缓存的区别

    HTTP缓存头是组HTTP响应头,它们控制浏览器和中间代理服务器如何缓存网页内容。合理使用HTTP缓存头可以显著提高网站的加载速度和性能,减少服务器的负载。 1. HTTP
    的头像 发表于 12-18 09:41 821次阅读

    Web缓存的类型及功能分析

    速度,降低了延迟,并提高了网站的可用性。 Web缓存的类型 Web缓存主要分为以下几种类型: 浏览器缓存(Browser Cache) 功能 :浏览器缓存是用户计算机上的
    的头像 发表于 12-18 09:35 1240次阅读

    缓存技术在软件开发中的应用

    在现代软件开发中,随着数据量的爆炸性增长和用户对响应速度的高要求,缓存技术成为了提升系统性能的重要手段。缓存技术通过将数据存储在离用户更近的位置,减少数据访问延迟,提高数据处理速度,从而优化
    的头像 发表于 12-18 09:32 1142次阅读

    什么是缓存(Cache)及其作用

    缓存(Cache)是种高速存储器,用于临时存储数据,以便快速访问。在计算机系统中,缓存的作用是减少处理器访问主存储器(如随机存取存储器RAM)所需的时间。 缓存(Cache)概述
    的头像 发表于 12-18 09:28 1.5w次阅读