【问题标题】:Starting unrelated Celery task within a task in a chord在和弦中的任务中启动不相关的 Celery 任务
【发布时间】:2014-04-23 19:31:46
【问题描述】:

我是 celery 的新手,我无疑错过了显而易见的事情,但是我如何在另一个应该完全独立于 some_other_task 执行的 celery some_other_task 中启动一个 celery some_worker_task?特别是我有一个芹菜和弦

junk = chord((task_create_syslog_records.s(syslog, user, syslog.fileset_id)
              for syslog in syslog_queryset),
             task_create_syslog_records_done_email.si(user, len(syslog_queryset), syslog_queryset[0].fileset_id))()

在其中一个 task_create_syslog_records 中的某些条件下,我需要启动另一个与和弦无关的任务 do_some_stuff。它可以完全独立于和弦运行,并且和弦不需要/不需要它的结果。和弦应该完成并且 task_create_syslog_records_done_email 运行,即使 do_some_stuff 仍在运行。

【问题讨论】:

  • 为什么不直接在task_create_syslog_records 实现中调用这些任务?
  • 现在我正在做 do_some_stuff.delay(records)。任务运行,但它似乎是和弦组的一部分!那就是 task_create_syslog_records_done_email 直到 do_some_stuff 完成后才会运行。 我应该如何开始 do_some_stuff?

标签: celery


【解决方案1】:

您可以在现有任务中创建另一个 celery 任务:

@app.task
def do_some_stuff():
    pass

@app.task
def task_create_syslog_records(syslog, user, filset_id):
    # ...    
    if condition_is_matched:
        do_some_stuff.delay()
    # ...
    return result

【讨论】:

  • 这就是我正在做的。不幸的是,无论出于何种原因,和弦的完成任务 (task_create_syslog_records_done_email) 直到 do_some_stuff 完成后才会执行。就好像 do_some_stuff 成为和弦的一部分。有什么需要使用的选项吗?
猜你喜欢
  • 2017-12-21
  • 2020-12-26
  • 1970-01-01
  • 2018-02-11
  • 2016-11-07
  • 1970-01-01
  • 2019-11-21
  • 2014-11-04
  • 2013-12-16
相关资源
最近更新 更多