我试着用记忆来存储结果。从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
控制器只加载相关视图。那有什么办法?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐