【发布时间】:2015-01-12 14:08:08
【问题描述】:
在一些 Django 视图中,我使用这样的模式来保存对模型的更改,然后根据新的模型数据进行一些异步更新(例如生成图像,进一步更改模型)。 mytask 是一个芹菜任务:
with transaction.atomic():
mymodel.save()
mytask.delay(mymodel.id).get()
问题是任务永远不会返回。查看 celery 的日志,任务排队(我在日志中看到“已接收任务”),但它从未完成。如果我将mytask.delay...get 调用移出事务,它会成功完成。
transaction.atomic 和 celery 之间是否存在一些不兼容?在 Django 1.6 或 1.7 中,我是否可以在一个事务下同时进行常规模型更新和来自单独任务流程的更新?
我的数据库是 postgresql 9.1。我正在使用 celery==3.1.16 / django-celery 3.1.16,amqp==1.4.6,Django==1.6.7,kombu==3.0.23。 broker后端是amqp,队列是rabitmq。
【问题讨论】:
标签: django postgresql transactions celery