Django芹菜和弦没有执行

时间:2013-03-17 20:29:04

标签: django celery django-celery djcelery

我有一个程序可以通过Python的itertools生成大量产品;基本上是一大堆各种单词组合。有多个集合可以通过products()函数运行。我想做的是让Celery通过给每个套装提供不同的Celery任务来帮助解决这个问题,然后将它们组合在一起。我的理解是和弦是实现这一目标的方法。

基本上我有这个:

callback = tabulate_results.subtask()
header = []
for combo in combos_to_run:
    header.append(run_product.subtask(args=(object_terms, combo)))
result = chord(header)(callback)
result.get()

它的两个支持,精简功能:

from celery import subtask, chord
@task()
def run_product(object_list, combo_set):
    results = []
    for result in product(object_list, *combo_set):
        results.append(result)
    return results

@task()
def tabulate_results(result_sets):
    master_set = []
    for result_set in result_sets:
        master_set.extend(result_set)

    return master_set

起初,和弦任务出现在celeryev中,但我在这里引用了一个问题:Django Celery - Missing something but I have no idea what? Have results but can't get them关于Celery返回与MySQL结果跟踪有关的错误。我确实使用MySQL作为我的结果后端,并将其切换到Redis摆脱它。但是,现在我遇到了一个新问题。当我通过Django shell运行代码时,celeryev中没有任何任务出现,除此之外没有任何内容返回:

R IS: <GroupResult: 9f658e8d-591f-4fa9-9e79-4db0c51e8331 [9b199d1e-061f-413c-9521-4a3051dd121a, 2effbfb5-c9dc-4569-a63f-656c233a9387, 80911a60-6a22-46bb-83a1-d5a84c659794, 70acfa43-8ffe-4bc8-8ff1-1df6def035e1, dd417423-d1f6-44eb-8c4b-2ded40d7614f, fbff8adc-815d-459c-b914-b30528dbbd39]>

基本上是Celery消息,但没有数据。代码也永远不会返回,我的光标悬空。当我控制C输出时,Celery中的行号似乎在等待。我不知道为什么,因为celeryev没有给我任何任务。我已经确认其他任务确实在celeryev中显示。

我已经正常测试了我的函数,而没有将它们作为Celery任务运行,并且它们正常返回。

短片 我正在尝试让Celery和弦在我的Django应用程序中帮助完成密集的Python任务,但他们似乎没有返回任何结果或进入celeryev。 Redis后端。芹菜版3.0.15。 Django 1.4。

1 个答案:

答案 0 :(得分:1)

首先,让一个任务等待另一个任务的结果通常被认为是不好的做法(这就是为什么应该使用链式子任务) - source

除此之外,您为和弦粘贴的语法不正确。以下是相关链接:http://docs.celeryproject.org/en/master/getting-started/next-steps.html#chords。在其他问题中,您的代码不会将任何任务传递给和弦。和弦只是一组作为一组处理的任务,之后会触发回调。从文档中,这是和弦的正确语法:

>>> from celery import chord
>>> from proj.tasks import add, xsum

>>> chord((add.s(i, i) for i in xrange(10)), xsum.s())().get()
90

请注意,和弦有两个参数,一方面是初始任务组,另一方面是回调(用逗号分隔)。

这是一个开始,但听起来好像花更多时间阅读文档可以帮助你解决问题。

相关问题