我有一个简单的上下文管理器和事务:
@contextmanager
def transaction(db):
try:
yield
db.session.commit()
except:
db.session.rollback()
raise
我有带有任务的代码:
with transaction(db):
for x in Test.query.all()
x.update()
notify_change.apply_async()
如何在会话提交或中止任务之前保留任务?猴子补丁?有什么想法吗?
如何实现类似于django-celery-transactions
的东西?
以下是处理同一问题的人的快速示例:
https://medium.com/hypertrack/dealing-with-database-transactions-in-django-celery-eac351d52f5f
本质是您应该以某种方式保存所有apply_async()
调用,直到您知道数据库事务已结束。