深入学习Django源码基础4 - python的动态延时加载技术(lazy)

【Python】深入理解Python中的懒加载:从零实现按需加载提升程序性能 懒加载(Lazy Loading)是一种在实际需要时才加载数据或资源的编程技术,广泛应用于提升程序的性能和启动速度。尤其在Python中,懒加载机制可以显著降低初始化时间和内存占用。本文详细介绍如何在Python中实现懒加载,涵盖懒加载的基本概念、使用场景、自定义类实现、装饰器实现,以及高级应用场景。通过大量的代码示例和详细的中文注释,帮助读者理解如何高效地管理资源的加载过程,从而优化Python程序的性能。 阅读详情

在编程时候经常会遇到这样情况

程序中需要1个示例,但是这个示例当前用不到。初始化和计算需要一定的时间。

这个时候就要用到动态延时加载技术。一般手段有代理类,线程。计时器。

在python中也有这样方法。

python中方法的思路是:

构造1个代理类,保存对象或者函数的名称,参数。

实际调用时候,在初始化对象,计算。


参考文章:点击打开链接


对象的构造方法如下

#coding: utf-8
#
class LazyProxy(object):

    def __init__(self, cls, *args, **kwargs):

        self.__dict__['_cls'] = cls
        self.__dict__['_params'] = args
        self.__dict__['_kwargs'] = kwargs

        self.__dict__["_obj"]=None

    def __getattr__(self, item):

        if self.__dict__['_obj'] is None:
            self._init_obj()

        return getattr(self.__dict__['_obj'], item)


    def __setattr__(self, key, value):

        if self.__dict__['_obj'] is None:
            self._init_obj()

        setattr(self.__dict__['_obj'], key , value)


    def _init_obj(self):

        self.__dict__['_obj']=object.__new__(self.__dict__['_cls'],
                                             *self.__dict__['_params'],
                                             **self.__dict__['_kwargs'])
        self.__dict__['_obj'].__init__(*self.__dict__['_params'],
                                       **self.__dict__['_kwargs'])


class LazyInit(object):

    def __new__(cls, *args, **kwargs):
        return LazyProxy(cls, *args, **kwargs)


class A(LazyInit):

    def __init__(self, x):

        print ("Init A")
        self.x = 14 + x


a = A(1)
print "Go"
print a.x

函数的

""" 
lazy - Decorators and utilities for lazy evaluation in Python 
Alberto Bertogli (albertito@blitiri.com.ar) 
"""  
  
class _LazyWrapper:  
    """Lazy wrapper class for the decorator defined below. 
    It's closely related so don't use it. 
 
    We don't use a new-style class, otherwise we would have to implement 
    stub methods for __getattribute__, __hash__ and lots of others that 
    are inherited from object by default. This works too and is simple. 
    I'll deal with them when they become mandatory. 
    """  
    def __init__(self, f, args, kwargs):  
        self._override = True  
        self._isset = False  
        self._value = None  
        self._func = f  
        self._args = args  
        self._kwargs = kwargs  
        self._override = False  
  
    def _checkset(self):  
        print '111111111111', self._isset, self._value  
        if not self._isset:  
            self._override = True  
            self._value = self._func(*self._args, **self._kwargs)  
            self._isset = True  
            self._checkset = lambda: True  
            self._override = False  
  
    def __getattr__(self, name):  
        print '----------getattr----',  name  
        if self.__dict__['_override']:  
            return self.__dict__[name]  
        self._checkset()  
        print '@@@@@@@@@', self._value, type(self._value), name, self._value.__getattribute__(name)  
        return self._value.__getattribute__(name)  
  
    def __setattr__(self, name, val):  
        print '----------setattr----',  name, val  
        if name == '_override' or self._override:  
            self.__dict__[name] = val  
            return  
        self._checkset()  
        print '222222222222222'  
        setattr(self._value, name, val)  
        return  
  
def lazy(f):  
    "Lazy evaluation decorator"  
    def newf(*args, **kwargs):  
        return _LazyWrapper(f, args, kwargs)  
  
    return newf  
 
 
@lazy  
def quick_exe():  
    print '---------quick exe-----------'  
    return 'quickquick'  
  
import pdb  
#pdb.set_trace()  
  
quick_exe()  
print '#####################'  
print quick_exe()


uWSGI部署Python Web应用的核心技术与实践指南 WSGI协议作为Python Web开发的核心标准,定义了Web服务器与应用框架之间的通用接口规范。其工作原理是通过标准化的environ字典和start_response回调实现HTTP请求/响应转换,使开发者能专注于业务逻辑开发。uWSGI作为高性能的WSGI实现,采用事件驱动架构和C语言优化,在并发处理能力和资源利用率上显著优于传统方案。在Django、Flask等主流框架的生产部署中,uWSGI通过进程管理、异步I/O支持和Nginx反向代理等特性,能够稳定支撑3000+并发请求。本文重点解析uWS 阅读详情

相关推荐

Django+PostgreSQL在Ubuntu 14.04上的稳定部署与工程实践

PostgreSQL 是一种功能完备、事务强一致的关系型数据库,其核心优势在于行级锁、可序列化快照隔离(SSI)、原生 JSONB 支持及稳定查询优化器;Django 作为成熟 Python Web 框架,通过 ORM 深度适配 PostgreSQL 的语义能力,如 ArrayField、JSONField 和 HStoreField 等字段类型可实现零损耗落地。这种组合在资源受限、运维人力紧张、数据一致性要求严苛的生产场景中展现出卓越的抗扰动能力与长期稳定性。典型应用包括教务排课系统、物流订单调度、嵌入式

384

python:用装饰器实现“懒加载”

标题中说这是“懒加载”是因为,如果条件允许,你完全可以手动在程序最开头执行一遍加载,而不用等用到了函数再加载。有时,我们需要在一个函数执行之前加载一些什么,而且只在第一次执行前加载一次。但是有点麻烦,而且这种情况一多起来,总感觉自己一直在复制粘贴。下面来看看如何用装饰器抽象这一功能。

TsXor的博客 1174

基于Django的图书管理系统:从CRUD到全栈实战项目开发指南

在Web开发领域,CRUD(增删改查)操作是构建数据驱动应用的基础,而对象关系映射(ORM)技术则极大地简化了数据库交互。Django作为Python生态中一款开箱即用的全栈Web框架,其内置的ORM、Admin后台和认证系统,为开发者提供了快速构建稳健后台管理系统的能力,技术价值在于能显著提升开发效率并保证代码质量。这类技术广泛应用于内容管理系统、企业内部工具及各类信息管理平台。本文聚焦于一个经典的实战案例——学生图书管理系统,通过Django框架深度拆解其作为全栈微缩项目的实现,涵盖从数据模型设计、基于

weixin_30847939的博客 398

【Python爬虫】懒加载

懒加载,也就是延迟加载。

qq_1532145264的博客 1605

Python+Flask构建动漫数据可视化系统实战

数据可视化是现代数据分析的重要技术手段,通过将抽象数据转化为直观图表,帮助开发者快速洞察数据规律。Python生态中的Flask框架因其轻量级特性,成为构建Web可视化系统的首选工具。结合ECharts等前端图表库,开发者可以轻松实现动态交互式数据展示。在动漫产业数据分析场景中,这种技术组合能高效处理评分数据、用户行为等结构化信息,通过折线图、词云等形式展现作品热度趋势和标签分布。典型实现方案包含数据采集、清洗存储、可视化呈现三个核心环节,其中Pandas用于数据处理,SQLAlchemy管理数据库交互,配

386

uWSGI部署Python Web应用全指南

WSGI(Web Server Gateway Interface)是Python Web开发的核心协议标准,定义了Web服务器与应用框架间的通用接口规范。uWSGI作为高性能WSGI服务器实现,采用C语言编写并支持多进程/多线程架构,能显著提升Python应用的并发处理能力。其技术价值体现在协议兼容性(支持HTTP、uwsgi等)、资源利用率优化以及丰富的扩展插件体系。在Web服务架构中,uWSGI通常与Nginx组成黄金组合,前者负责Python应用执行,后者处理静态资源和负载均衡。本文以Django/

weixin_34037515的博客 394

Python性能优化:懒加载与其他高级技巧

懒加载是一种设计模式,它推迟了对象的初始化直到其被实际需要的时候。这种方式可以提高程序的启动速度,减少内存消耗,并在某些情况下提高性能。

AutotestProject 657

NHibernate延迟加载与DDD实践:代理机制深度解析

延迟加载是ORM框架的核心能力之一,其本质是在运行时按需加载关联数据,以平衡性能与内存开销。在.NET生态中,NHibernate通过动态代理实现该机制,深度结合C#的virtual特性与反射能力,既保障了领域模型的完整性,又支持领域驱动设计(DDD)所强调的业务逻辑内聚性。其技术价值不仅在于减少N+1查询,更在于为审计、软删除、租户隔离等横切关注点提供架构级支持。典型应用场景包括金融系统中的强一致性实体访问、SaaS多租户数据隔离,以及需要精细控制加载策略的复杂聚合根操作。本文聚焦NHibernate中延

didi9310的博客 387

【python爬虫】懒加载(以站长素材为例)

什么是懒加载?

weixin_63133658的博客 2780

基于Python+Django的京东商品比价系统:从爬虫到Web应用的全栈实践

网络爬虫作为自动化数据采集的核心技术,其原理在于模拟浏览器行为,向目标网站发送HTTP请求并解析返回的HTML文档,从而高效提取结构化信息。这项技术在现代数据驱动决策中价值显著,尤其在电商领域,通过实时抓取商品价格、库存及评价数据,为消费者提供精准的比价服务,辅助其做出更经济的购物选择。Django框架以其“开箱即用”的特性,为快速构建此类数据驱动的Web应用提供了强大支持,其内置的ORM、Admin后台和MTV模式,极大地简化了从数据处理到前端展示的开发流程。本系统正是这一技术组合的典型应用,它利用Pyt

weixin_30460489的博客 372

Python+Django构建京东比价系统:从爬虫到Web全栈开发实战

网络爬虫作为自动化数据采集的核心技术,其原理在于模拟浏览器行为,通过HTTP请求获取网页数据并解析提取结构化信息。这项技术为数据分析、市场研究等场景提供了数据基础,具有显著的工程价值。在电商领域,价格数据是关键的商业信息,通过爬虫技术持续追踪商品价格,结合数据存储与分析,可以构建出实用的比价与价格监控系统。本文以Python生态中的Django框架为核心,详细阐述了如何设计并实现一个完整的京东商品比价系统。项目涵盖了利用requests与BeautifulSoup进行数据抓取、应对反爬策略、使用Django

weixin_30808693的博客 1921

Django 的动态特性:从 Python 动态机制到框架设计思想

Django 的动态特性让它在快速开发中极具优势。你可以即时修改模型、切换数据库、动态加载视图,无需编译,无需额外注册。但这也带来一定代价:类型系统不够严格,IDE 难以提供完整的静态推断支持(例如.objects的补全)。灵活是一种力量,也是一种责任。Django 让开发者获得了极高的自由度,但同时也要求更强的代码规范意识与测试能力。

DaPiCaoMin的博客 1133

基于Python与Django的学生管理系统后台开发完整指南

在Web开发与数据管理领域,后台管理系统是支撑业务高效运转的核心工具。对于学生信息管理这类典型场景,如何构建一个功能完善、结构清晰的后台系统,是许多开发者关注的重点。Python凭借简洁语法与丰富的生态,成为快速开发此类系统的优选语言。借助Django框架的ORM映射、用户认证与Admin机制,开发者能够高效实现数据建模、权限控制及增删改查等基础能力。同时,数据库设计中表关系的合理规划、统计报表的数据聚合逻辑,以及搜索分页等交互细节,直接影响系统的实用性。该类系统广泛应用于高校教务管理、班级信息维护及成绩统

weixin_33946020的博客 431

Django Unfold:终极现代化Django管理界面完全指南

Django Unfold是一款革命性的现代化Django管理界面主题,它为开发者提供了告别传统admin的全新体验。作为基于Tailwind CSS构建的强大工具,django-unfold为Django内置的管理后台带来了现代化设计、增强的工作流程和丰富的功能特性。这篇文章将为你提供完整的Django Unfold指南,帮助你快速上手并充分利用这个强大的管理界面解决方案。 ## 项目亮点速览

gitblog_00152的博客 807

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

病理图像tiles自动生成,WSI图像预处理

qq_43449643的博客 1740

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

本次比赛让自己在大数据的处理流程上有了更明确的认知,从数据清洗、特征工程、数据建模,每一个过程都能学到很多经验和知识,值得去历练。

weixin_46685991的博客 1万+

pylint-django的隐藏补丁术:Monkey Patching静默消除no-member误报的完整原理

🔍 写 Django 项目时,你是否也被 Pylint 的 **no-member 误报**刷屏?`Book.objects.filter(...)` 明明能跑,却被判定"实例没有 filter 成员"。[pylint-django](https://link.gitcode.com/i/6b823956e70b5cd59ba774705e4295b2) 是一款专为 Django 打造的 Pyl

gitblog_00558的博客 964

Flink项目基础配置指南

在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配

qq_42773076的博客 1210

TETRA云原生全栈组件框架深度解析:构建现代化Django应用的高性能数据管道终极指南

TETRA是一个革命性的全栈组件框架,专为Django生态系统设计,通过创新的服务器端状态管理和实时双向通信机制,为开发者提供了构建现代化Web应用的高性能数据管道解决方案。本指南将深入解析其技术架构、核心特性、部署实践以及生态集成方案,帮助您掌握这一强大的开发工具。 ## 技术架构解析:融合Django与Alpine.js的智能桥梁 TETRA的核心架构设计理念是"关注点邻近性"——将相关的

gitblog_00121的博客 754

AI Agent开发实战:100个真实场景题库解析

AI Agent开发涉及复杂的需求理解、架构设计及安全防护等关键技术环节。在工程实践中,开发者常面临需求偏差、系统崩溃等挑战,特别是在金融、医疗等高要求场景下。通过真实案例题库,开发者能系统性地掌握需求分析、架构决策树建模(如向量数据库选型)、安全攻防策略(如提示词注入防御)等核心技能。这些实战经验不仅能提升Agent的可用性和安全性,还能优化其在电商客服、智能家居等场景中的表现。题库采用动态难度系统,覆盖从基础到高级的开发挑战,是AI工程化落地的重要参考。

weixin_29057695的博客 342

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2000

python-redmine四大核心对象全解析:Redmine、ResourceManager、Resource、ResourceSet一篇讲透

**python-redmine** 是一个用于与 Redmine 项目管理应用通信的开源 Python 库。它把 Redmine 的 REST API 封装成了类似 Django ORM 的 Pythonic 接口,让你用几行代码就能完成项目的增删改查、问题跟踪和工时管理。 整个库的运行逻辑其实只靠 **4 个核心对象** 支撑: | 对象 | 一句话定位 | 源码位置 | |------|

gitblog_00438的博客 226

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

GW1NSR-4C ARM部分共有2个串口外设,都挂载在APB1总线上,最高支持波特率921.6Kbit/s,无奇偶校验位,8位数据位,1位停止位,支持高速测试模式 HSTM(High Speed Test Mode),即每个时钟周期输出1位数据,可以在短时间内传输大量数据。官方手册上没有描述发送和接收缓存FIFO的深度,所以不确定是否支持缓存。

whik1194的博客 1683

vue基于python的摄影作品分享信息系统的设计与实现

需要成品或者定制,文章最下方名片联系我即可~ 所有项目都经过测试完善,本系统包修改时间和标题,包安装部署运行调试,不满意的可以定制。注:实际开发中需根据需求调整技术栈,例如替换FastAPI为后端或增加Elasticsearch实现搜索功能。前端采用Vue.js框架,后端使用Python的Flask/Django。MySQL或PostgreSQL存储用户信息、作品元数据及评论。数据库工具:Navicat for mysql。开发软件:PyCharm/vscode。框架:flask/django。

QQ_402205496的博客 1025

【软件系统架构】系列六:系统工程

系统工程是一种跨学科方法论,用于分析、设计、集成和管理复杂系统的全生命周期。其核心特点包括系统性思维、全周期管理、跨学科协作和需求导向。主流采用V模型生命周期,涵盖需求分析、系统设计、实现、测试验证及运维退役等阶段。核心工作方法包括需求工程、系统建模、接口设计、风险管理等。系统工程与项目管理协同,分别侧重技术实现和进度资源管理。应用领域覆盖航天军工、智能制造、智慧城市等。未来将向AI融合、数字孪生、模型驱动工程等方向发展,为复杂系统开发提供系统化协作范式。

moton2017的博客 2257

Orin+ GMSL (Ser 9295+Des 9296)流程分析(1)

orin gmsl

乐于分享 2652
上一篇: 深入学习Django源码基础3 - python提供的对象默认方法
下一篇: 深入学习Django源码基础5 - utils中archive技巧
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值