gpt4 book ai didi

python - Celery link_error 引发 NotRegistered 异常

转载 作者:可可西里 更新时间:2023-11-01 11:23:32 34 4
gpt4 key购买 nike

我有一个客户端 celery 应用程序为工作人员(使用 Redis)发布任务,它工作正常。客户端和工作应用程序都使用相同的配置:

app = Celery('clientApp', broker='redis://redis:6379/0',backend='redis://redis:6379/0')
# Listen to queue2

app = Celery('workerApp', broker='redis://redis:6379/0',backend='redis://redis:6379/0')
# Listen to queue1

现在我想在成功或错误时执行处理程序,所以我使用了这样的东西:

task = Signature('mytask', queue='queue1')

task.apply_async(
link=Signature("handle_success", queue='queue2'),
link_error=Signature("handle_error", queue='queue2'))

成功时正确调用 handle_success 但当 mytask 引发 Exception 时不调用 handle_error。你能看出任何原因吗?这里的目标是 client 在 worker 失败的任务上执行 handle_error(就像它在 worker 任务成功完成时执行 handle_sucess ).

celery.exceptions.NotRegistered: 'handle_error'

当 celery 应用程序启动时,我没有错误或信息消息,两个应用程序的后端是相同的 url,handle_success/handle_error 正确显示在客户端的注册任务中.

最佳答案

通过使用此 article 中列出的 hack 解决.

如果 link_error 参数是一个单一的任务,它会被 worker 直接执行(不像 link),这是一种强制 worker 将任务发送到的方法客户端将使用链。

from .tasks import error_callback
app.send_task("system_b.foo", link_error=(error_callback.si() | error_callback.si())

或者使用虚拟任务和辅助函数使其更清晰,请参阅文章。

关于python - Celery link_error 引发 NotRegistered 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56116848/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com