Django的指定重试次数的事务
Django's transaction with a specified number of retries
我曾经使用 Google App Engine 构建系统,我可以在其中使用装饰器解决竞态条件。我还可以指定在发生冲突时我想重试该操作的次数。以下是卖票的例子:
@ndb.transactional(retries=10)
def addNumSales(ticket):
ticket.numSales += 1
ticket.put()
现在要切换到Django,事务处理如下:
@transaction.atomic
def addNumSales(ticket):
ticket.numSales += 1
ticket.save()
上面只是保证了一个原子事务,没有异常处理。我查看了 Django 的文档,但找不到如何处理异常,尤其是指定重试次数。有什么建议吗?
虽然这不能回答您关于重试次数的问题,但您可以根据数据库值编写一个原子增量,这样就不会发生冲突,方法是使用 F expression:
def addNumSales(ticket):
ticket.numSales = F('numSales') + 1
ticket.save()
我曾经使用 Google App Engine 构建系统,我可以在其中使用装饰器解决竞态条件。我还可以指定在发生冲突时我想重试该操作的次数。以下是卖票的例子:
@ndb.transactional(retries=10)
def addNumSales(ticket):
ticket.numSales += 1
ticket.put()
现在要切换到Django,事务处理如下:
@transaction.atomic
def addNumSales(ticket):
ticket.numSales += 1
ticket.save()
上面只是保证了一个原子事务,没有异常处理。我查看了 Django 的文档,但找不到如何处理异常,尤其是指定重试次数。有什么建议吗?
虽然这不能回答您关于重试次数的问题,但您可以根据数据库值编写一个原子增量,这样就不会发生冲突,方法是使用 F expression:
def addNumSales(ticket):
ticket.numSales = F('numSales') + 1
ticket.save()