django-celery-transactions is a Django app that holds on to Celery tasks until the current database transaction is committed, avoiding potential race conditions as described in the Celery user guide. This lets you focus on your app's structure—send tasks from signal handlers without fear!
See https://github.com/chrisdoble/django-celery-transactions
Note: As request signals are used to implement this functionality, it will only work from within the request/response cycle.
Installation/Use
Install django-celery-transactions from PyPI:
pip install django-celery-transactions
Use the patched decorator to create your tasks:
from djcelery_transaction import task
@task
def example():
print "Hooray, the transaction has been committed!"
Product's homepage
Here are some key features of "django-celery-transactions":
· If the transaction is rolled back, the tasks are discarded. Django's transaction middleware does this if your view raises an exception.
· If transactions aren't being managed, tasks are sent as normal. This means that sending tasks from Django's shell will work as expected, as will the transaction decorators commit_on_success, commit_manually, etc.
Requirements:
· Python
· Django