Как запустить несколько рабочих из сельдерея? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть две задачи в 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». Сообщение было проигнорировано и отклонено. Помните ли вы импортировать модуль, содержащий эту задачу? Или, может быть, вы используете относительный импорт? ""

Когда я запускаю только одного из работников сельдерея, он работает без каких-либо ошибок, но при запуске нескольких работников из сельдерея я сталкиваюсь с этой ошибкой.

...