文档中的 celery chain kwargs 示例

celery chain kwargs example from docs

芹菜文档中存在此示例。

>>> new_user_workflow = (create_user.s() | group(
...                      import_contacts.s(),
...                      send_welcome_email.s()))
... new_user_workflow.delay(username='artv',
...                         first='Art',
...                         last='Vandelay',
...                         email='art@vandelay.com')

如您所见,kwargs 在 create_user 子任务中隐式可用。虽然我假设返回的用户对象提供了导入和发送所需的值,但在我的一生中,我无法弄清楚 create_user 在这个例子中是如何访问 kwargs 的。当我用 create_user 任务对此进行模拟时,它总是得到 0 个参数,我认为这是因为没有参数传递给 .s()。有谁知道如何访问 create_user 中的 kwargs?

这是我的测试代码:

@app.task()
def create_user(*args, **kwargs):
    print args
    print kwargs
    return "foo"

@app.task()
def something_else(*args, **kwargs):
    print args
    print kwargs

test = chain(create_user.s(), something_else.s())
test.delay(username="test", password="testp")

结果:

()
{}
('foo',)
{}

谢谢。

编辑:添加了测试代码

在芹菜上创建了一个问题 github,这似乎是一个错误。

https://github.com/celery/celery/issues/2695