芹菜任务调用另一个任务

时间:2014-08-01 20:22:26

标签: python celery django-celery

我有两个文件。一个是我的程序的主文件,它包含所有必须完成的芹菜任务:

chord(
    tasks.task_01.subtask(task_id='task_01'),
    tasks.task_02.subtask(task_id='task_02')
).delay()

然后我有一个task.py文件:

@task(bind=True)
def task_01(self, result=None):

    headers = models.Header.objects.all()
    group(extract_emails.subtask((header,)) for header in headers).delay()

最后,extract_emails接受了:

@task(bind=True)
def extract_emails(header, result=None):

    print header.id  #to check in celery log if the header item is recieved
    url_parser.find_emails(header)

所以我的目标是执行task_01,以便它运行一组' extract_emails'任务与'标题并行的'作为一个论点。 我希望' extract_emails'任务收到这个标题并用它运行一些简单的代码。

当我尝试这样做时,我得到: AttributeError("' extract_emails'对象没有属性' id'",)

它来自哪里?我甚至没有将任务的名称作为参数传递!我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

在我的特定示例中,'extract_emails'任务应该以这种方式编写:

@task(bind=True)
def extract_emails(self, result=None):

    header = self.request.args[1] 
    url_parser.find_emails(header)

只需使用self.request.PARAM即可提取所需内容。 您可以在official docs中找到更多信息。