首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Celery异步任务仅执行一次

Celery异步任务仅执行一次
EN

Stack Overflow用户
提问于 2014-01-22 02:39:04
回答 1查看 193关注 0票数 0

因此,我有一个任务,我从该任务调用另一个发送电子邮件的任务:

代码语言:javascript
复制
@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

邮件发送任务为:

代码语言:javascript
复制
@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没有被执行。我在日志里没看到任何东西。

知道为什么吗?当我重新启动芹菜工作程序时,它第一次发送电子邮件,但在那之后就停止发送电子邮件了。

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 05:12:05

首先,我认为像您这样使用广泛的异常处理程序不是一个好主意。除了例外,因为exc会对你隐藏任何问题,你永远不会知道实际发生了什么。

您可以在移除异步调用并使其同步之后调试您的代码:

Send_verification_email(结果“‘user”)

我会解释的。您需要删除所有.delay调用,并直接调用您的任务。在send_verification_email()任务中,您可以插入行

导入pdb;pdb.set_trace()

跟踪调用并查看email_service.send_verification_email(user_id).的结果

代码语言:javascript
复制
@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‘安装它

我不能评论,因为我刚刚注册,没有carma。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21266463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档