所以我有一个任务,我可以从中调用另一个发送电子邮件的任务:
@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。我在日志中看不到任何内容。
知道为什么吗?当我重新启动Celery工作时,它会在第一时间发送电子邮件,但之后会停止发送电子邮件。
答案 0 :(得分:0)
首先,我认为像你这样使用广泛的异常处理程序是一个坏主意。除了异常,因为exc会隐藏你的任何问题,你永远不会知道 - 实际发生了什么。
您可以在删除异步调用并使其同步后调试代码:
send_verification_email(结果[ '用户'] [ 'ID'])
我会解释。您需要删除所有.delay调用并直接调用您的任务。在send_verification_email()任务中你可以插入行
import 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)
此外,你可以用pudb替换pdb,这是更友好的。您可以使用'pip install pudb'
进行安装我无法发表评论,因为我刚注册并且没有卡玛。