开发者

django djcelery: building a transactional task is not rolling back

开发者 https://www.devze.com 2023-03-29 14:18 出处:网络
am trying to do a transactional tasks whereby the task will rollback the database updates if it fails to send the email.

am trying to do a transactional tasks whereby the task will rollback the database updates if it fails to send the email.

Below is my code, any one can advice what am doing wrong here?

from celery.task import task
from django.core.mail import send_mail, send_mass_mail
from django.db import transaction


@task(name='communicator.process_emails')
@transaction.commit_manually
def process_emails():
    from models import Comm_Queue
    try:
        message = []
        for i in Comm_Queue.objects.filter(status='P').order_by('sender_email'):
            message.append((i.subject, i.content, i.sender_email, [i.recipient_email]开发者_如何学JAVA))
            Comm_Queue.objects.filter(id=i.id).update(status='S')
        if send_mass_mail(message):
            transaction.commit()
    except Exception, e:
        print 'rolled back (exception): %s' % e.__str__()
        transaction.rollback()


Since you're using MySQL, the first thing you need to check is whether the database engine you're using supports transactions in the first place and whether transactions have been enabled in MySQL configuration.

See this link for more information on MySQL/Django transaction issues: https://docs.djangoproject.com/en/dev/ref/databases/#storage-engines

0

精彩评论

暂无评论...
验证码 换一张
取 消