я хотел бы знать, что это лучший способ для имитации PostGreSQL nexval в питоне 3.Как имитировать последовательность PostGreSQL NEXTVAL в питоне 3
Я хотел бы иметь переменный/объект Attr, значение которого autoincremented на запросить его ценность. То же самое, как работает следующая последовательность db. Это будет «ежедневный секвенсер», значение которого увеличивается при каждом вызове get (и будет перезагружаться в полночь с помощью cronjob).
Моя идея состояла в том, чтобы использовать Singleton (с некоторым постоянным кешем в обратном направлении), но он терпит неудачу в многопоточной среде.
class OnlyOne:
class __OnlyOne:
key = "key"
def __init__(self):
val = cache.get(self.key, None)
if val is None:
val = 0
cache.set(self.key, val)
self.val = val
def __str__(self):
return str(self.nextval)
@property
def nextval(self):
self.val += 1
cache.set(self.key, self.val)
return self.val
instance = None
def __init__(self):
if not OnlyOne.instance:
OnlyOne.instance = OnlyOne.__OnlyOne()
def __getattr__(self, name):
return getattr(self.instance, name)
У кого-нибудь есть идея?
Благодаря
Спасибо за помощь. К несчастью, я не смог сделать его многопроцессорным. Конечным решением для меня является создание async-задачи для очереди сельдерея с одним рабочим, поэтому его небольшое узкое место, но оно быстро и не так болезненно. – Pavel