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()