Как использовать блокировку с pymemcache на Django?

Я использую pymemcache 3.5.0 с Django 3.2.7. У меня много скриптов, запущенных на моем экземпляре Django и также использующих кэш для обмена данными между ними. В настройках Django у меня есть следующие конфигурации:

def json_serializer(key, value):
    print("Message Type: " + str(type(value)))
    if type(value) == str:
        return value, 1
    return json.dumps(value), 2

def json_deserializer(key, value, flags):
    if flags == 1:
        return value.decode('utf-8')
    if flags == 2:
        return json.loads(value.decode('utf-8'))
    raise Exception("Unknown serialization format")

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'no_delay': True,
            'ignore_exc': True,
            'max_pool_size': 1000,
            'use_pooling': True,
            'serializer': json_serializer,
            'deserializer': json_deserializer,
        }
    }
}

В документации по pymemcache я вижу, что я могу добавить параметр lock_generator, в описании написано следующее:

- lock_generator - обратный вызов/тип, не принимающий аргументов, который будет вызван для создания блокировки или семафора, способного защитить пул от одновременного доступа (например, вместо него можно использовать блокировку или семафор eventlet)

Но нигде нет примера, я много перерыл, но ничего не нашел о том, как это реализовать. Есть ли здесь кто-нибудь, кто знает, как реализовать блокировку, чтобы 2 потока не могли дважды записать или прочитать один и тот же ключ?

Спасибо большое!

Вернуться на верх