Python唯一方法标识符

时间:2012-03-20 20:31:16

标签: python memcached

我正在尝试缓存python方法的输出,因此对于缓存键我使用hash(方法)+序列化args。我正在为多个工作机器使用单个memcached服务器。

问题是,散列(方法)已被证明在这些工作机器和进程中不一致。

class Foo(object):
    def bar():
       pass

x = Foo()
hash(x.bar) #was inconsistent across machines/processes

id()不起作用,因为它是一个内存位置,因此只能在一台机器上运行。

谢谢!

3 个答案:

答案 0 :(得分:1)

我会使用函数的名称,例如x.foo.__name__

答案 1 :(得分:1)

答案 2 :(得分:1)

设置名称修改函数,该函数将使用类名和方法名来创建字符串,然后获取字符串的哈希值。例如,让x为方法

def method_hash(x):
    return hash("{0}.{1}".format(x.__objclass__.__name__, x.__name__))

这假定该方法来自类而不是特定对象。如果来自对象,则可以使用x.__self__.__name__代替。