所以我有一个任务,我从中调用了另一个发送电子邮件的任务:
@app.task(name='login.sync.register')
def register(user_obj):
result = user_service.register(user_obj)
from .async import send_verification_email
send_verification_email.delay(result['user']['id'])
return result
电子邮件发送任务是:
@app.task(name='login.async.send_verification_email', bind=True, max_retries=3)
def send_verification_email(self, user_id):
try:
email_service.send_verification_email(user_id)
except Exception as exc:
raise self.retry(exc=exc)
它首次完美地工作。电子邮件发送。当我第二次调用寄存器任务时,它会成功,但send_verification_email未执行。我在日志中看不到任何东西。
知道为什么吗?当我重新启动芹菜工人时,它是第一次发送电子邮件,但随后停止发送电子邮件。
首先,我认为使用像您这样的广泛例外处理程序是一个坏主意。除例外,因为Exc将隐藏您的任何问题,而您将永远不会知道 - 实际发生了什么。
您可以在删除异步调用并使其同步后调试代码:
send_verification_email(结果['用户'] ['id'])
我会解释的。您需要删除所有.DELAY呼叫并直接调用您的任务。和内部send_verification_email()任务您可以插入行
导入pdb; pdb.set_trace()
跟踪呼叫并观看email_service.send_verification_email(user_id)的结果。
@app.task(name='login.async.send_verification_email', bind=True, max_retries=3)
def send_verification_email(self, user_id):
import pdb;pdb.set_trace()
email_service.send_verification_email(user_id)
您还可以用PDB替换PDB,而PUDB几乎没有友好。您可以使用'pip install pudb'
安装它我无法发表评论,因为我只是注册并且没有Carma。