【发布时间】:2011-08-19 16:51:10
【问题描述】:
我正在尝试执行事务性任务,如果无法发送电子邮件,该任务将回滚数据库更新。
以下是我的代码,任何人都可以建议这里做错了什么?
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
标签: django celery django-celery