当前位置: 首页 > wzjs >正文

大型社区网站开发文档网站主题栏目分类

大型社区网站开发文档,网站主题栏目分类,网站域名备案需要什么,旅游网站设计内容本文翻译整理自:https://github.com/pydanny/cached-property 文章目录 一、关于 cached-property相关链接资源关键功能特性 二、安装三、使用指南1、基础用法2、手动清除缓存3、线程安全版本4、异步支持5、缓存超时(TTL) 四、致谢 一、关于…

本文翻译整理自:https://github.com/pydanny/cached-property

文章目录

    • 一、关于 cached-property
      • 相关链接资源
      • 关键功能特性
    • 二、安装
    • 三、使用指南
      • 1、基础用法
      • 2、手动清除缓存
      • 3、线程安全版本
      • 4、异步支持
      • 5、缓存超时(TTL)
    • 四、致谢


一、关于 cached-property

cached-property 是一个用于缓存类属性的装饰器工具。


相关链接资源

  • github : https://github.com/pydanny/cached-property
  • PyPI : https://pypi.python.org/pypi/cached-property
  • Python 3.8+ 内置实现 : https://docs.python.org/3.12/library/functools.html#functools.cached_property
  • 问题跟踪 : https://github.com/pydanny/cached-property/issues/16

关键功能特性

  • 快速简便地缓存耗时或计算密集型的类属性
  • 支持 Python 2 和 3(Python 3.8+ 已内置类似功能)
  • 提供线程安全版本 threaded_cached_property
  • 支持异步属性缓存
  • 可设置缓存超时时间(TTL)

二、安装

pip install cached-property

三、使用指南


1、基础用法

定义包含昂贵计算属性的类:

class Monopoly:def __init__(self):self.boardwalk_price = 500@propertydef boardwalk(self):# 模拟耗时操作(如数据库查询或API调用)self.boardwalk_price += 50return self.boardwalk_price

测试效果(每次访问属性值都会变化):

>>> monopoly = Monopoly()
>>> monopoly.boardwalk
550
>>> monopoly.boardwalk
600

转换为缓存属性:

from cached_property import cached_propertyclass Monopoly(object):def __init__(self):self.boardwalk_price = 500@cached_propertydef boardwalk(self):self.boardwalk_price += 50return self.boardwalk_price

测试效果(值被缓存):

>>> monopoly = Monopoly()
>>> monopoly.boardwalk
550
>>> monopoly.boardwalk  # 缓存生效
550

2、手动清除缓存

通过删除实例字典中的属性来清除缓存:

>>> del monopoly.__dict__['boardwalk']
>>> monopoly.boardwalk  # 重新计算
600

3、线程安全版本

多线程环境下使用 threaded_cached_property

from cached_property import threaded_cached_propertyclass Monopoly:def __init__(self):self.boardwalk_price = 500@threaded_cached_propertydef boardwalk(self):sleep(1)self.boardwalk_price += 50return self.boardwalk_price

多线程测试:

>>> from threading import Thread
>>> threads = []
>>> for x in range(10):
>>>     thread = Thread(target=lambda: monopoly.boardwalk)
>>>     thread.start()
>>>     threads.append(thread)
>>> [t.join() for t in threads]
>>> assert monopoly.boardwalk == 550  # 确保线程安全

4、异步支持

缓存异步属性:

from cached_property import cached_propertyclass Monopoly:def __init__(self):self.boardwalk_price = 500@cached_propertyasync def boardwalk(self):self.boardwalk_price += 50return self.boardwalk_price

异步调用示例:

>>> async def print_boardwalk():
...     monopoly = Monopoly()
...     print(await monopoly.boardwalk)
...     print(await monopoly.boardwalk)  # 使用缓存值
>>> asyncio.get_event_loop().run_until_complete(print_boardwalk())
550
550

注:异步版本不适用于多线程环境。


5、缓存超时(TTL)

设置缓存自动失效时间:

from cached_property import cached_property_with_ttlclass Monopoly(object):@cached_property_with_ttl(ttl=5)  # 5秒后缓存失效def dice(self):return random.randint(2,12)

测试效果:

>>> monopoly = Monopoly()
>>> monopoly.dice
10
>>> monopoly.dice  # 5秒内使用缓存
10
>>> sleep(6)      # 等待缓存过期
>>> monopoly.dice  # 重新计算
3

注:TTL 功能可能存在缓存清除不彻底的问题。


四、致谢

  • 感谢 Pip、Django、Werkzeug 等项目的类似实现
  • Reinout Van Rees 推荐原始装饰器方案
  • @tinche 提供线程安全解决方案
  • @bcho 贡献 TTL 功能

伊织 xAI 2025-04-27(日)


文章转载自:

http://nklsPvFA.btypn.cn
http://RovjGLMQ.btypn.cn
http://UShQdxzg.btypn.cn
http://kSWJHEZc.btypn.cn
http://KSMI2jAe.btypn.cn
http://mmaMGNYP.btypn.cn
http://EJbRjrWB.btypn.cn
http://ndJTnTI7.btypn.cn
http://mzanHZJ5.btypn.cn
http://aDfG2Srv.btypn.cn
http://7iQFdBqO.btypn.cn
http://lSVmVx3T.btypn.cn
http://FdQVOPeZ.btypn.cn
http://a7BJOrFJ.btypn.cn
http://uWI5msKW.btypn.cn
http://SeLFeUbX.btypn.cn
http://G832Uaes.btypn.cn
http://2Rf42FSZ.btypn.cn
http://578CVLU2.btypn.cn
http://8QaBJFaA.btypn.cn
http://lMWeCFEq.btypn.cn
http://xJhvbC80.btypn.cn
http://xVOwwcU2.btypn.cn
http://DLwta3ej.btypn.cn
http://o3kcOo9V.btypn.cn
http://vKxC6Pk4.btypn.cn
http://Qz1Rbt8Z.btypn.cn
http://1dSiZaRZ.btypn.cn
http://ejbIkXCC.btypn.cn
http://FwXA7lk0.btypn.cn
http://www.dtcms.com/wzjs/636092.html

相关文章:

  • 河北邯郸wap网站建设大连建筑工程网
  • 建设行业协会网站发展的建议2022今天出京入京最新通知
  • 做网站怎么能在百度搜索到2022中国互联网公司排名
  • 如何写一个可以做报价计算的网站必须重视的问题之一
  • 为什么会有人攻击我用织梦做的网站手机制作网页链接的软件
  • 个人网站建设教程北京官网seo收费
  • 企业网站模板趋势下载软件的网站推荐
  • html5手机app网站模板免费下载外包公司做网站怎么样
  • 怎么查网站备案进度pythom 网站开发规范
  • 网站建设要学哪些软件有哪些内容做母婴的网站有哪些
  • 自己做的网站如何制作后台技术支持 洛阳网站建设
  • 制作网站的专业公司吗常宁网页设计
  • 外包兼职做图的网站搜索引擎优化是什么?
  • 德州北京网站建设网站设计用什么字体
  • 扬州整站seo免费咨询服务
  • 在家做网站设计网站同步微博
  • 专门做问卷的网站如何给网站设置关键词
  • 便宜做网站怎么样wordpress移动端底部添加菜单
  • 国外网站建设现状房产网签流程及注意事项
  • 烟台市政建设招标网站星空影视文化传媒制作公司
  • 专门做相声的网站网站自助服务建设策划
  • 企业网站seo工作珠宝网站设计
  • 有那些专门做财务分析的网站请打开app
  • 湖北 商城网站建设企业网站公众号
  • 人社局网站建设方案在5分钟内注册小程序
  • 中间商可以做网站吗wordpress换域名教程
  • 浙江理工大学网站设计与建设中山网站建设文化策划
  • 提供网站建设服务的网站价格poiplayer wordpress
  • 做去态网站要学什么语言重庆知名网站制作公司
  • 不同网站相似的页面百度收录吗如何制作一款小程序