具有指定重试次数的Django事务

时间:2015-08-04 13:17:55

标签: django transactions

我曾经使用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的文档,但无法找到如何处理异常,特别是指定了一些重试。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

虽然这不能回答关于重试次数的问题,但您可以根据数据库值编写原子增量,因此使用F expression不会发生冲突:

def addNumSales(ticket):
    ticket.numSales = F('numSales') + 1
    ticket.save()