Запустить блокировку задачи Celery Flask - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь организовать структуру проекта для приложения Flask + Celery. Когда я работал в одном файле, все работает отлично. Но когда я распределял код по модулям, вызов test_task.apply_asyn c () блокирует flask. Структура моего проекта:

web_spider/
 app/
  __init__.py
  rest/
   __init__.py
   views/
    __init__.py
    test_view.py
   flask_app.py
  task_runner/
   __init__.py
   celery_app.py
   tasks.py
 requirements.txt

test_view.py

import flask
from app.task_runner.tasks import test_task

api_test_view = flask.Blueprint('api_test_view', __name__)

@api_test_view.route('/')
def test_view():
 test_task.apply_async() #lock there
 return 'Hello, World!'

flask_app.py

import flask
from app.rest.views.api_test_view import test_view

flask_app = flask.Flask(__name__)
flask_app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
flask_app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
flask_app.register_blueprint(test_view)

if __name__ == '__main__':
flask_app.run(debug=True)

celery_app.py

from app.rest.flask_app import flask_app
import celery

celery_app = celery.Celery(flask_app.name, broker=flask_app.config['CELERY_BROKER_URL'])

celery_app.conf.update(flask_app.config)

задач .py

from celery import shared_task

@shared_task
def test_task():
 return 1 + 1

1 Ответ

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

Возможно, вы не загружаете celery_app, и shared_task не может найти приложение Celery для работы. Добавьте в ваш web_spider / app / __ init__.py или в web_spider / app / task_runner / __ init__.py:

from app.task_runner.celery_app import celery_app

__all__ = ('celery_app',)

Это задокументировано в https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html#django -первых шагах поиск shared_task.

...