FlaskアプリでCeleryを使ってバックグラウンドタスクを実行する方法
環境設定
必要なツールとライブラリをインストールします。
-
Redisのインストール
macOSを使用している場合、Homebrewを通じてRedisを簡単にインストールできます。brew install redis
インストール後、Redisサーバーを起動します。
redis-server
-
FlaskとCeleryのライブラリのインストール
pip install Flask Celery redis
Flaskアプリの設定
Flaskアプリを設定し、Celeryのインスタンスを初期化します。
from flask import Flask
from celery import Celery
app = Flask(__name__)
app.config["broker_url"] = "redis://localhost:6379/0"
app.config["result_backend"] = "redis://localhost:6379/0"
app.config['broker_connection_retry_on_startup'] = True
celery = Celery(app.name, broker=app.config["broker_url"])
celery.conf.update(app.config)
タスクの定義
非同期タスクをCeleryで定義します。
@celery.task
def process_files(file_path_list):
for path in file_path_list:
print(f'Processing {path}')
タスクの実行
Flaskルートから非同期タスクを実行します。
@app.route('/start-task')
def start_task():
process_files.delay(["path1", "path2", "path3"])
return "Task started!", 202
Celeryワーカーの起動
ターミナルで以下のコマンドを実行して、Celeryワーカーを起動します。
celery -A your_flask_file_name.celery worker
この設定により、Flaskアプリケーションはバックグラウンドでタスクを実行し、非同期処理の完了を待たずに応答を返すことができます。