首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何忽略函数工具中的参数。lru_cache?

如何忽略函数工具中的参数。lru_cache?
EN

Stack Overflow用户
提问于 2016-08-14 09:38:59
回答 1查看 3.3K关注 0票数 12

这是我想通过缓存增强的函数的框架,因为执行RPC (远程过程调用)涉及到到其他主机的TCP连接。

代码语言:javascript
复制
def rpc(rpc_server, rpc_func, arg):
    return rpc_server.do_rpc(rpc_func, arg)

不过,最方便的方法是简单地用以下方式装饰它:

代码语言:javascript
复制
@functools.lru_cache()

不能很好地工作,因为rpc_server对象来来去去,缓存应该忽略这个参数。

我可以自己写一个简单的回忆录代码。这没问题。事实上,我看不出其他的解决办法。

我无法以这样的方式重写这个函数,以至于@lru_cache()装饰器可以应用, rpc_server将作为参数传递(也就是说,我不想使rpc_server成为一个全局变量)。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-16 07:28:32

我发这篇文章只是为了追求完美。欢迎提出意见,但请不要投票。

我从我的问题中找到了一种满足条件的方法。我不打算用这段代码。但它展示了Python的灵活性。

代码语言:javascript
复制
import functools

class BlackBox:
    """All BlackBoxes are the same."""
    def __init__(self, contents):
        # TODO: use a weak reference for contents
        self._contents = contents

    @property
    def contents(self):
        return self._contents

    def __eq__(self, other):
        return isinstance(other, type(self))

    def __hash__(self):
        return hash(type(self))

@functools.lru_cache()
def _cached_func(blackbox, real_arg):
    print("called with args:", blackbox.contents, real_arg)
    return real_arg + 1000

def cached_func(ignored_arg, real_arg):
    # ignored means ignored by the cache
    return _cached_func(BlackBox(ignored_arg), real_arg)

cached_func("foo", 1) # cache miss
cached_func("bar", 1) # cache hit

cached_func("bar", 2) # cache miss
cached_func("foo", 2) # cache hit
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38940954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档