芹菜异步任务仅执行一次



所以我有一个任务,我从中调用了另一个发送电子邮件的任务:

@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。

相关内容

  • 没有找到相关文章

最新更新