Code Files for Celery & Flask

17/02/2024

These are the code files that (sort of) worked on my server to run Flask with Celery. Only some - not all - tasks get added to the Celery queue, and I'm not sure why. I adapted code from the offical Flask tutorial on Celery, Background Tasks with Celery, and consulted the Celery Documentation

Starting Python for Debugging

tmux new -s python-sesh

source celeryflask-env/bin/activate

python backend.py

Starting Celery for Debugging

tmux new -s celery-sesh

source celeryflask-env/bin/activate

celery -A app_and_tasks worker --loglevel INFO

Code Files:

create_celery_flask.py
from flask import Flask from celery import Celery, Task def create_app() -> Flask: app = Flask(__name__) app.config.from_mapping( CELERY=dict( broker_url="redis://localhost", result_backend="redis://localhost", task_ignore_result=True, ), ) app.config.from_prefixed_env() celery_init_app(app) return app def celery_init_app(app: Flask) -> Celery: class FlaskTask(Task): def __call__(self, *args: object, **kwargs: object) -> object: with app.app_context(): return self.run(*args, **kwargs) celery_app = Celery(app.name, task_cls=FlaskTask) celery_app.config_from_object(app.config["CELERY"]) celery_app.set_default() app.extensions["celery"] = celery_app return celery_app
app_and_tasks.py
from create_celery_flask import create_app from flask_cors import CORS from celery import shared_task import feedparser flask_app = create_app() CORS(flask_app) celery_app = flask_app.extensions["celery"] @shared_task(ignore_result=False) def getpod(url): result = feedparser.parse(url) return result.feed
backend.py
from flask import request from celery.result import AsyncResult from app_and_tasks import flask_app, getpod @flask_app.post('/startpodreq') def startpodreq(): request_data = request.get_json() task = getpod.apply_async(args=[request_data['url']]) return {"task_id": task.id} # todo: set to this machine's ip when done developing? if __name__ == "__main__": flask_app.run(host='0.0.0.0', debug=True, port=5004)
🠜⭪ HOME 🠜⭪ SITEMAP