记忆导入时不记忆

2024-04-25 09:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用记忆来存储结果。从Django视图调用函数,并在视图文件的顶部导入函数模块所在的包。你知道吗

我的应用程序/实用程序/获取_峰值.py

MEMO = {}

def lookup_peak(carrier_code, environment):
    if carrier_code not in MEMO:
        response = urllib2.urlopen('someurl&carrier=' + carrier_code)
        html = response.read()
        start = html.find('PK')
        MEMO[carrier_code] = html[start:start+3].lower()

    return MEMO[carrier_code]

我的应用程序/视图.py

import my_app.utils as utils

class MapView(FormView):
    ...
    def get_context_data(self, **kwargs):
        ...
        peak = utils.get_peak.lookup_peak(carier_code, 'PRD')
        ...

如果在peak赋值之后启动调试器,我可以看到utils.get_peak.MEMO包含新值,但是如果我刷新页面(发出新的视图请求),MEMO再次为空,并且会再次计算memoization模块中的If分支。你知道吗

有人知道为什么会这样,以及如何让它正常工作吗?你知道吗

好像每次都重新评估get_peak模块,并将MEMO重置为{},但我不明白为什么会发生这种情况。不应该只在导入时进行评估吗?我只是在代码中调用函数,而不是整个模块。你知道吗

编辑我认为问题是每次都导入模块,因此MEMO会被重新评估。我不知道为什么会发生这种情况,因为我期望urls.py控制器只加载相关视图。那有什么办法?你知道吗


Tags: 模块py视图应用程序getdefhtmlcode