【问题标题】:Celery task on_success handler has kwargs always emptyCelery 任务 on_success 处理程序的 kwargs 始终为空
【发布时间】:2019-11-23 08:58:47
【问题描述】:

Celery 版本 = 4.3.0

我想要做的就是能够在任务的自定义成功处理程序中访问 c​​elery 任务函数(普通和关键字)的实际参数。我能够正确打印出非关键字参数,但关键字参数始终为空。

下面是代码

taskResultsHandler

from celery import Task

class ActionOnCompletion(Task):
    def on_success(self, retval, task_id, args, kwargs):
        print "inside success handler"
        print retval[0] # prints => ["results"]
        print retval[1].get('meta') # prints => this is meta
        print "task function args were"
        print args # prints => (<value_of_arg1 as passed while invoking the task>, <value_of_arg2 as passed while invoking the task>)
        print "keyword args"
        print type(kwargs) # prints => <type 'dict'>
        print kwargs # prints => {} I was expecting {"someKeyWordArg":"randommmm"} to be printed here !
        print kwargs.get('someKeyWordArg') # does not print anything

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        print einfno

实际任务

from celeryConfig.celeryApp import celapp
from celeryConfig.taskResultsHandler import ActionOnCompletion

@celapp.task(base=ActionOnCompletion)
def myTask(arg1, arg2, someKeyWordArg="randommmm"):
    print("starting my task")
    print someKeyWordArg
    time.sleep(5)
    return ["results"], {'meta':"this is meta"}

有人可以帮我理解我在上面遗漏了什么,为什么我能够得到非关键字 args 很好但一个空的关键字 arg ?

现在我有一些变通方法来完成我的工作,比如在我的任务中只使用 args 而不是 kwargs 并在 on_success 中访问它们,但我真的很想知道上面出了什么问题.

【问题讨论】:

    标签: python-2.7 celery celery-task keyword-argument


    【解决方案1】:

    您的任务签名需要更改为def on_success(self, retval, task_id, *args, **kwargs):

    【讨论】:

    • 这仍然不起作用。我试着得到同样的空字典。 :(
    • @qre0ct 你成功解决这个问题了吗?
    • @MikhailSibirev 不。我没有它就继续工作。
    猜你喜欢
    • 2013-07-17
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多