2017-06-02 61 views
0

我在我的project中使用RabbitMQ版本“3.5.7”和芹菜4.0.2。执行组后,芹菜链不执行任务

这是在this file创建芹菜链的代码:

@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中的报表切换并进行检查,并发生相同的问题!

我正在做一些琐碎的事情吗?或者这是一个错误?

谢谢!

UPDATE:找到了解决方案!

回答

1

这是一个非常有趣的错误!花了一些时间才能发现后端应该是一些持久的后端,比如SQL或Redis。

所以,我做了芹菜中配置this修改:

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

而且,芹菜链(和弦)完美地工作。 希望它有帮助!