簡體   English   中英

django djcelery:建立事務性任務不會回滾

[英]django djcelery: building a transactional task is not rolling back

正在嘗試執行一個事務性任務,如果該任務無法發送電子郵件,該任務將回滾數據庫更新。

以下是我的代碼,任何人都可以建議這里做錯了什么?

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]))
            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()

由於您使用的是MySQL,因此首先需要檢查的是您使用的數據庫引擎是否首先支持事務以及MySQL配置中是否已啟用事務。

有關MySQL / Django事務問題的更多信息,請參見此鏈接: https : //docs.djangoproject.com/en/dev/ref/databases/#storage-engines

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM