Python中的Memoization在请求之间持久存在

时间:2015-12-10 08:39:44

标签: python django request memoization

我今天早些时候遇到过这种技术,但我不确定它是如何运作的。我不认为这个例子真的很重要,但我正在使用Django作为应用程序。

def post_to_endpoint(request, key=None):
    if not hasattar(post_to_endpoint, '__my_memo__'):
        post_to_endpoint.__my_memo__ = {
            "key1": "url" + "path",
            "key2": "url2" + "path",
            "key3": "url3" + "path",
            "key4": "url4" + "path",
        }

    if key:
        url = post_to_endpoint.__my_memo__.get(key, None)

        if url:
            # make my request here

    # return the response    

我理解在这个人为的例子中,它可能是一种微观优化。在我的函数中,我只会在每次调用时重新创建dict。在基本层面上,我理解这个dict被隐藏在一个名为func_dict的东西中,但我真正理解的是它是如何存在于请求之间的。

我从PHP背景中理解的是,整个框架是在每个请求上初始化的,但是Python / Django / WSGI可能不是这样吗?我也很难理解所有这些是如何与进程/线程一起运行的,也许这些信息在那里保持活着?我本来期望这样的东西需要在某种持久缓存中完成,但显然事实并非如此。

另外,其他提到的备忘录的海报也可以通过import字典实现,但我也不明白它们在请求之间会如何生效。

1 个答案:

答案 0 :(得分:0)

Daniel Roseman在评论中回答了这个问题:

"你自己已经回答了这个问题。 WSGI应用程序在单独的进程(或许多进程)中运行,该进程在许多请求中持续存在"