У меня есть две задачи в python, которые хотят запустить их в фоновом режиме с помощью сельдерея. Я использую следующие функции для определения сельдерея.
from celery import Celery
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
flask_app = Flask(__name__)
flask_app.config.update(
CELERY_BROKER_URL='redis://localhost:6379/0',
CELERY_RESULT_BACKEND='redis://localhost:6379/0'
)
celery = make_celery(flask_app)
####task 1
@celery.task(name="run1")
def code1(a, b):
return a * b
####task 2
@celery.task(name="run2")
def code2(c, d):
return c + d
code1.delay(5, 8)
code2.delay(77, 26)
Я запускаю рабочих из сельдерея следующим образом:
celery -A run1.celery worker&
celery -A run2.celery worker&
Но когда я отправляю некоторые задания в фоновый режим, я сталкиваюсь с ошибками ниже:
"" Получено незарегистрированное задание типа «run1». Сообщение было проигнорировано и отклонено. Помните ли вы импортировать модуль, содержащий эту задачу? Или, может быть, вы используете относительный импорт? ""
Когда я запускаю только одного из работников сельдерея, он работает без каких-либо ошибок, но при запуске нескольких работников из сельдерея я сталкиваюсь с этой ошибкой.