我在我的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中的语句并进行了检查,发生了同样的问题!
我做的事情是错误的还是这个错误?
谢谢!
更新:找到解决方案!
答案 0 :(得分:1)
这是一个非常有趣的错误!花了一些时间才发现结果后端应该是像SQL或Redis那样的持久后端。
所以,我在Celery config中进行了this修改:
- celeryconfig['CELERY_RESULT_BACKEND'] = 'amqp://'
+ celeryconfig['CELERY_RESULT_BACKEND'] = 'redis://localhost'
并且,芹菜链(和弦)完美运作。 希望它有所帮助!