Как использовать блокировку с 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 потока не могли дважды записать или прочитать один и тот же ключ?
Спасибо большое!