аккорд сельдерея, не выполняет функцию обратного вызова - PullRequest
0 голосов
/ 29 мая 2019
from flask import Flask
from celery import Celery
from datetime import timedelta
from celery import  group, chord, chain

def make_celery(app):
    celery = Celery(
        app.import_name,
        backend=app.config['CELERY_RESULT_BACKEND'],
        broker=app.config['CELERY_BROKER_URL']
    )
    celery.conf.update(app.config)

    class ContextTask(celery.Task):
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return self.run(*args, **kwargs)

    celery.Task = ContextTask
    return celery

app = Flask(__name__)
app.config.update(
    CELERY_BROKER_URL='redis://localhost:6379',
    CELERY_RESULT_BACKEND='redis://localhost:6379',
)
celery = make_celery(app)

@celery.task()
def add_together(a, b):
    print("starting task adding " + str(a) + " & " + str(b))
    return a + b

@celery.task()
def finish_callback(results):
    print('Group task finished')
    return 0


@app.route('/group_task')
def task_group():
    short_tasks = [add_together.delay(10, 1),
            add_together.delay(10, 3),
            add_together.delay(10, 4),
            add_together.delay(10, 5),
            add_together.delay(10, 6)
    ]

    callback = finish_callback.s()
    chord(short_tasks, callback)

    return 'Executing Parallel Task'

У меня есть приложение Flask, в котором у меня есть некоторая фоновая операция с подзадачами. Я пытаюсь решить эту проблему с сельдереем. В приведенном выше фрагменте кода chord не вызывает метод обратного вызова. Все задачи успешно выполнены, но метод обратного вызова не выполнен. Может кто-нибудь сказать мне, что не так с приведенным выше кодом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...