芹菜:如何忽略和弦或链中的任务结果?

lxy*_*xyu 31 python asynchronous task celery

我正在使用芹菜,我有几个需要按顺序执行的任务.

例如,我有这个任务:

@celery.task
def tprint(word):
    print word
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

>>> chain(tprint.s('a') | tprint.s('b'))()
Run Code Online (Sandbox Code Playgroud)

然后我明白了TypeError: tprint() takes exactly 1 argument (2 given).

和弦一样,在这种情况下我需要在一组任务后执行任务:

>>> chord([tprint.s('a'), tprint.s('b')])(tprint.s('c'))
Run Code Online (Sandbox Code Playgroud)

那么如何处理这种情况呢?我不关心每项任务的结果,但需要按顺序执行.


添加第二个参数将无法正常工作:

@celery.task
def tprint(word, ignore=None):
    print word

>>> chain(tprint.s('a', 0) | tprint.s('b'))()
Run Code Online (Sandbox Code Playgroud)

这将打印出'a'和'None'.

Vla*_*lov 63

有一个内置的功能可以忽略链接中的结果和其他 - 不可变的子任务.您可以使用.si()快捷方式而不是.s()或.subtask(immutable = True)

更多详细信息:http://docs.celeryproject.org/en/master/userguide/canvas.html#immutability

  • 赞成!我阅读了文档,但仍然不理解术语,如果您不介意分享,不变性到底应该做什么 (3认同)
  • 他们似乎滥用了该术语,但是此选项背后的想法很简单。它将函数标记为不希望通过传递给其参数的链接计算获得结果的函数。 (2认同)
  • 我现在明白 si 的用途了,谢谢! (2认同)
  • 该链接指向 404。新位置是:https://docs.celeryq.dev/en/stable/userguide/canvas.html#immutability (2认同)