gpt4 book ai didi

python - python 的延迟加载或早期加载?

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:58 24 4
gpt4 key购买 nike

我们有以下代码示例:

big_static_data = {
"key1" : {
"subkey1" : "subvalue1",
...
},
"key2" :
...
}
class StaticDataEarlyLoad:
def __init__(self):
self.static_data = big_static_data
# other init
def handle_use_id(self, id):
return complex_handle(self.static_data, id)
...
class StaticDataLazyLoad:
def __init__(self):
# not init static data
# other init
def handle_use_id(self, id):
return complex_handle(big_static_data, id)
...

正如上面的代码所说,每当我们调用实例的handle_use_id时,我们可能会遇到不同的性能问题。

IMO,早期加载将在创建实例时加载数据,并将在内存中直到实例被垃圾化。对于延迟加载,在我们调用 handle_use_id 方法之前不会加载静态数据。 我说得对吗?(因为我不太清楚 Python 的内部结构,所以我不确定该实例在垃圾处理之前会持续多久)。如果我是对的,提前加载意味着需要大量内存,而延迟加载意味着我们每次调用方法时都必须加载数据(开销很大?)

现在,我们是一个基于网络的项目,那么应该选择哪种方法作为最佳方法?(handle_use_id 将被频繁调用。)

谢谢。

最佳答案

在您的示例中,StaticDataLazyLoad(一旦 init 的语法正确)不会产生很大的不同。

“big_static_data”在导入模块时被初始化(“加载”)。无论是否创建类的实例,它都会立即需要一些内存。

StaticDataEarlyLoad 的实例只会创建对 big_static_data 的新引用,而不是新副本。

因此,在 StaticDataEarlyLoad 中查找可能会稍微快一些,因为数据是通过本地范围内的 self 引用的(查找“self”,然后查找“self.static_data”)。

在 StaticDataLazyLoad 中查找不会在本地范围内找到“big_static_data”,python 将在全局范围内查找并找到它。由于全局范围可能更大,因此此查找可能比“self.static_data”的查找花费更长的时间。

关于python - python 的延迟加载或早期加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756276/

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