Уникальный метод Python - PullRequest
       1

Уникальный метод Python

0 голосов
/ 21 марта 2012

Я пытаюсь кэшировать вывод метода python, поэтому для ключа кэша я использую hash (метод) + сериализованные аргументы.Я использую один сервер memcached для нескольких рабочих машин.

Проблема в том, что хэш (метод) оказался несовместимым на этих рабочих машинах и процессах.

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

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

id () wonне работает, потому что это место в памяти и, следовательно, работает только на одной машине.

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 марта 2012
1 голос
/ 21 марта 2012

Установите функцию искажения имени, которая примет имя класса и имя метода для создания строки, а затем примет хеш для строки.Например, пусть x будет методом, тогда

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

Это предполагает, что метод принадлежит классу, а не конкретному объекту.Если из объекта, то вместо него можно использовать x.__self__.__name__.

1 голос
/ 21 марта 2012

Вместо этого я бы использовал имя функции, например x.foo.__name__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...