FlaskでRQ(Redis Queue)を使って非同期タスク管理を行う方法|初心者向けやさしい解説
生徒
「Flaskでアプリを作ったら、ボタンを押したあと画面が固まってしまいました。これって普通なんですか?」
先生
「Flaskで長い処理をそのまま実行すると、待ち時間が発生します。そこでRQという仕組みを使う方法があります。」
生徒
「RQってなんですか? パソコンも最近触り始めたばかりで……。」
先生
「大丈夫です。Redis Queueを使った非同期タスク管理を、たとえ話を交えて説明します。」
1. Flaskと非同期タスク管理が必要な理由
FlaskはPythonで作られた、とても軽くて使いやすいWebフレームワークです。 しかし、時間のかかる処理をFlaskの中で直接動かすと、画面が止まったように見えてしまいます。
これは、電話対応中に別の仕事を同時に頼まれるような状態です。 一つずつしか対応できないため、待たせてしまいます。
Flask 非同期処理、長時間処理、タスク管理という言葉は、 この問題を解決するためによく検索されています。
2. RQ(Redis Queue)とは何か
RQとは、Redis Queueの略で、Redisという仕組みを使った「順番待ちの箱」です。 Redis(レディス)は、データを一時的に覚えておく高速なメモ帳のような存在です。
RQを使うと、「この作業を後でやってください」というお願いを箱に入れられます。 Flaskはお願いだけして、すぐに返事ができます。
これがFlask RQ 非同期タスク管理の基本的な考え方です。
3. まずは長時間処理の例を見てみる
次の例は、時間がかかる処理をFlaskで直接行っている例です。
from flask import Flask
import time
app = Flask(__name__)
@app.route("/slow")
def slow():
time.sleep(5)
return "処理が終わりました"
このAPIを呼ぶと、5秒間なにも返ってきません。 初心者の方は「壊れた」と感じやすい状態です。
4. RQで実行するタスクを作る
次に、時間のかかる処理をRQのタスクとして分けます。 タスクとは「後で実行する仕事」です。
import time
def long_task():
time.sleep(5)
return "裏で処理が完了しました"
この関数は、Flaskの外で実行される仕事になります。
5. FlaskからRQにタスクを登録する
Flask側では、RQに対して「この仕事をお願いします」と登録するだけです。
from flask import Flask
from redis import Redis
from rq import Queue
from tasks import long_task
app = Flask(__name__)
redis = Redis()
queue = Queue(connection=redis)
@app.route("/start")
def start():
queue.enqueue(long_task)
return "処理を受け付けました"
これでAPIはすぐに返事を返します。 処理はRQが順番に実行します。
6. ワーカーという実行担当者の役割
RQでは、ワーカーと呼ばれる担当者がタスクを実行します。 ワーカーは「箱の中身を確認して仕事をする人」です。
rq worker
このコマンドを実行すると、RQに入ったタスクが順番に処理されます。 Flaskとは別に動くのがポイントです。
7. RQを使うメリットと初心者向けの考え方
RQを使うことで、Flaskの画面が固まらなくなります。 ユーザーはすぐに操作を続けられます。
難しく感じるかもしれませんが、 「受付係」と「作業係」を分けるだけの仕組みです。
Flask RQ 使い方、Redis Queue 非同期処理、Python タスク管理 といったキーワードで、多くの人がこの方法を探しています。
8. 初心者が混乱しやすいポイント
初心者の方は、「結果をすぐ返さないといけない」と思いがちです。 しかし、まずは「受け付けた」という返事で十分です。
RQを使った非同期タスク管理は、 Flaskで安定したアプリを作るための基本的な設計です。