Использование скрученных к прокси вызовов memcache при доступе к атрибуту '__getattribute__'

Я пытался вызвать скрученные вызовы memcache из getattribute и вернуть значения моим объектам. Это возможно? Я думал, что collectResults ожидает, что вызов будет успешным или неуспешным, а затем возвращает результаты - что он и делает, но интерпретатор возвращает отложенное значение для всего, что обращается к атрибуту.

def __getattribute__(self, key):
        exempt = ['__providedBy__', '__class__', '__provides__', '__dict__', 'uid']
        if key in exempt:
            return object.__getattribute__(self, key)
        else:
            print key
            addr = IPv4Address('TCP', '127.0.0.1', 11211)
            mc_pool = MemCachePool(addr, maxClients=10)
            uid = object.__getattribute__(self, key)

            def return_res(res):
                return res

            deferred_calls = [mc_pool.get(key)]
            d = defer.gatherResults(deferred_calls, consumeErrors = True)
            d.addCallback(return_res)

1 ответ

Решение

Просто головы тому, кто сталкивался с этим. Этот подход не, не может, не будет, никогда не должен и никогда не будет работать. Twisted не вернет значение вашего кода блокировки. Поэтому, если вы столкнетесь с такой проблемой, вам нужно переосмыслить свой подход. Скрученные камни во многих отношениях - только не этот.

Другие вопросы по тегам