我曾经使用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的文档,但无法找到如何处理异常,特别是指定了一些重试。有什么建议吗?
答案 0 :(得分:1)
虽然这不能回答关于重试次数的问题,但您可以根据数据库值编写原子增量,因此使用F expression不会发生冲突:
def addNumSales(ticket):
ticket.numSales = F('numSales') + 1
ticket.save()