Celery执行组后没有执行任务

时间:2017-06-02 11:36:53

标签: python-2.7 flask rabbitmq celery

我在我的project中使用RabbitMQ版本“3.5.7”和Celery 4.0.2。

这是在this file中创建Celery链的代码:

@app.route('/transcodeALL', methods=['POST'])
def transcodeToALL():
    if request.method == 'POST':
        # We will do something like this to simulate actual processing of a video
        transcoding_tasks = group(
            transcode_1080p.signature(queue='tasks', priority=1, immutable=True),
            transcode_720p.signature(queue='tasks', priority=2, immutable=True),
            transcode_480p.signature(queue='tasks', priority=3, immutable=True),
            transcode_360p.signature(queue='tasks', priority=4, immutable=True)
        )
        main_task = chain(
            common_setup.signature(queue='tasks', immutable=True)
            transcoding_tasks,
            end_processing.signature(queue='tasks', immutable=True),
        )
        main_task.apply_async()
        return 'Video is getting transcoded to all dimensions!'
    else:
        return 'ERROR: Wrong HTTP Method'

此处,正在调用common_setup,然后在此之后调用组transcoding_tasks。但是,end_processing根本没有被调用。

不知何故,在执行组之后,不会调用其他任务。我已经切换了链here中的语句并进行了检查,发生了同样的问题!

我做的事情是错误的还是这个错误?

谢谢!

更新:找到解决方案!

1 个答案:

答案 0 :(得分:1)

这是一个非常有趣的错误!花了一些时间才发现结果后端应该是像SQL或Redis那样的持久后端。

所以,我在Celery config中进行了this修改:

-    celeryconfig['CELERY_RESULT_BACKEND'] = 'amqp://'
+    celeryconfig['CELERY_RESULT_BACKEND'] = 'redis://localhost'

并且,芹菜链(和弦)完美运作。 希望它有所帮助!