gpt4 book ai didi

python - Django 中的 cached_property 与 Python 的 functools 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 07:19:32 27 4
gpt4 key购买 nike

Django 有一个装饰器叫 cached_property 可以从 django.utils.functional 导入.另一方面,Python 3.8 添加了 cached_property 到可以从 functools 导入的标准库.
两者是否等效,即它们是否可以互换?或者两者有什么区别?何时使用一种或另一种有最佳实践吗?

最佳答案

经过一些研究,两者的工作方式基本相同,您会看到的唯一区别在于错误处理和性能。有一个ticket #30949在 Django 的问题跟踪器上使用 functools.cached_property而不是 django.utils.functional.cached_property .
您可以看到 source code [GitHub]functools.cached_property也适用于 django's version [GitHub] .基本的区别是 functool 的版本做了更多的错误处理,主要区别在于 functool 使用锁定机制来保证线程安全,这与 Django 的版本相比会导致性能下降。来自一些 benchmarking在上面链接的票证中完成似乎Django的版本在性能方面效率更高:

% python benchmark.py
.....................
Django Cache: Mean +- std dev: 12.8 ms +- 0.2 ms
.....................
Python Cache: Mean +- std dev: 113 ms +- 2 ms

还有一个 issue 43468关于 Python 的错误跟踪器。
总之,如果线程安全不是问题,请使用 Django 的版本,否则您可能想要使用 functools 版本。

关于python - Django 中的 cached_property 与 Python 的 functools 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68593165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com