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 не вызывает метод обратного вызова. Все задачи успешно выполнены, но метод обратного вызова не выполнен. Может кто-нибудь сказать мне, что не так с приведенным выше кодом?