Django和芹菜的交易障碍。
django-transaction-barrier的Python项目详细描述
django_transaction_barrier为 交易。django应用程序开发人员可以使用“事务 barrier”在事务中生成任务并保证 任务块,直到它能够访问 交易。django_transaction_barrier的设计 Celery记住并提供芹菜 任务基类。使用基类很容易编写 原子地修改数据库并生成一个芹菜任务来执行 在事务提交之后。
安装
从源安装或使用pip:
pip install django_transaction_barrier
并将“django_transaction_barrier”添加到 设置.py:
INSTALLED_APPS=('django_transaction_barrier',...)
用法
fromceleryimporttaskfromdjango.dbimporttransactionfromdjango_transaction_barrier.celeryimportTransactionBarrierTask@task(base=TransactionBarrierTask)defdo_something_task(model_id):value=Model.objects.get(id=model_id).value...@transaction.atomicdefkick_off_task(model,value):model.value=valuedo_something_task.apply_async_with_barrier(args=(model.id,))model.save()
详细信息
如果应用程序生成异步事务barriert,请询问任务 保证最终执行(假设任务队列是持久的) 在事务提交之后。如果事务中止,则任务 引发TransactionBorted异常并不执行。在 自动提交模式(即“交易外”) 事务barriertasks的行为类似于普通的芹菜任务。
如果应用程序同步执行transactionbarriertask(例如, 在事务中,任务执行 立即提交,而不等待事务提交。
实施
Django_transaction_barrier使用行实现事务壁垒 插入以表示已提交的事务和某些特定于数据库的逻辑 检测中止。
测试
docker build -t tests . && docker run tests
待办事项
- 添加对mysql后端的支持。