📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Flask Web Framework Flask Celery

Flask Celery

6 min read
Run slow tasks (email, PDF) in Celery workers with Redis as the broker from Flask routes.

Background Tasks with Celery

pip install celery redis

from celery import Celery

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):
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)

    celery.Task = ContextTask
    return celery

celery = make_celery(app)

# Define task
@celery.task
def send_welcome_email(user_id):
    user = db.session.get(User, user_id)
    # send email...

# Dispatch from route
@app.route("/register", methods=["POST"])
def register():
    user = create_user(request.json)
    send_welcome_email.delay(user.id)   # non-blocking!
    return jsonify(user.to_dict()), 201

# Start worker
# celery -A app.celery worker --loglevel=info