Подтвердить что ты не робот

Celery + Flask с Sqllite в качестве брокера, ошибка при вызове задачи

Я пытаюсь заставить Flask работать с Celery с Sqllite в качестве backend. При использовании следующего кода:

CELERY_BROKER_URL = 'sqla+sqlite:///' + os.path.join(basedir, 'celery.db')

def make_celery(app):
    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

После запуска работника Я получаю эту ошибку при попытке вызвать фиктивную задачу:

error: [Errno 10061] No connection could be made because the target machine actively refused it

код:

@app.route('/test')
def test():
    t = add_together.delay(100,200)
    return str(t.wait())

Что случилось? Я пробовал использовать любую комбинацию Sqllite/SQLAlchemy/Flask/Celery, но не смог найти решение.

4b9b3361

Ответ 1

Как вы можете видеть в своей трассе, ваше приложение все еще пытается подключиться к серверу rabbitmq. Это означает, что он не настроен должным образом. Я не понял, почему вы используете CELERY_BROKER_URL вместо BROKER_URL. Быстрое решение может быть, измените это:

celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])

к

celery = Celery(app.import_name,
                broker='sqla+sqlite:///' + os.path.join(basedir, 'celery.db'),
                backend='db+sqlite:///' + os.path.join(basedir, 'celery_results.db'))

Проверить, как это работает.

Ответ 2

error: [Errno 10061] No connection could be made because the target machine actively refused it  

Обычно ошибка означает, что целевой порт недоступен или заблокирован каким-то брандмауэром.

File "C:\Users\Robus\banking_virtenv\lib\site-packages\amqp\transport.py", line 95, in __init__
        raise socket.error(last_err)
    error: [Errno 10061] No connection could be made because the target machine actively refused it

Похоже, он пытается подключиться с помощью транспорта AMQP. Проверьте конфигурацию.