Сельдерей с Flask и UWSGI - PullRequest
       17

Сельдерей с Flask и UWSGI

1 голос
/ 22 января 2020

У меня есть простое приложение flask с простой задачей сельдерея:

from flask import Flask
from celery import Celery


app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379'

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

@celery.task
def add(x, y):
    return x + y


@app.route('/', methods=['GET'])
def test_func():
   res = add.delay(4,5)
   while not res.ready():
      pass
   data = res.get()
   return str(data)

if __name__ == '__main__':

   app.run(host='0.0.0.0',debug=True)

Когда я пытаюсь использовать ваш пример с uwsgi, но я сталкиваюсь почти с той же ошибкой, что и вы. Сначала я запускаю его просто с помощью python:

python app.py

и посредником с помощью следующей команды:

celery -A app.celery worker -l info

Все работает отлично. Теперь я пытаюсь запустить приложение flask с помощью uwsgi.

[uwsgi]
mount = /=/home/admin/flask-celery/app.py
callable = app
virtualenv = /home/admin/flask-celery/.venv
socket = :3031
master = true 
processes = 2
threads = 4
http = :9000

Но когда я go на своем маршруте, я сталкиваюсь со следующей ошибкой:

celery.exceptions.NotRegistered: 'uwsgi_file__home_admin_flask-celery_app.add'

1 Ответ

0 голосов
/ 02 апреля 2020

Попробуйте указать имя задачи в явном виде, например, так:

@celery.task(name='app.celery.add')
def add(x, y):
    return x + y

Чтобы изменения вступили в силу, перезапустите Celery Worker после внесения изменений и очистите все *.pyc файлы с помощью find . -name '*.pyc' -delete

...