FlaskでThreadingを使い、APIからのデータ取得とDBからのデータ取得を並列化したい。
| 登録日 | :2024/02/12 07:15 |
|---|---|
| カテゴリ | :Python基礎 |
FlaskでThreadingを使用する場合、外部APIとローカルデータベースからデータを並行して取得することができます。以下は、基本的なステップです:
Flaskアプリケーションを作成します。
マルチスレッドサポートを有効にするために、Flaskアプリケーションを作成する際にthreaded=Trueを指定します。
別々のスレッドで外部APIからのデータ取得とローカルデータベースからのデータ取得を行う関数を定義します。
それぞれの関数をスレッド化して実行します。
以下は、簡単な例です:
from flask import Flask, jsonify
import threading
import time
app = Flask(__name__)
# 関数:外部APIからデータを取得する
def get_data_from_external_api():
# ここで外部APIからデータを取得する処理を実行
time.sleep(5) # 仮の待機処理
return {'message': 'Data from external API'}
# 関数:ローカルデータベースからデータを取得する
def get_data_from_local_database():
# ここでローカルデータベースからデータを取得する処理を実行
time.sleep(3) # 仮の待機処理
return {'message': 'Data from local database'}
# Flaskルート:外部APIからのデータ取得
@app.route('/api/external')
def get_external_data():
# スレッドを作成して外部APIからデータを取得する関数を実行
t = threading.Thread(target=get_data_from_external_api)
t.start()
return jsonify({'message': 'Getting data from external API'})
# Flaskルート:ローカルデータベースからのデータ取得
@app.route('/api/local')
def get_local_data():
# スレッドを作成してローカルデータベースからデータを取得する関数を実行
t = threading.Thread(target=get_data_from_local_database)
t.start()
return jsonify({'message': 'Getting data from local database'})
if __name__ == '__main__':
# Flaskアプリケーションを実行し、マルチスレッドサポートを有効にする
app.run(debug=True, threaded=True)
この例では、get_external_data()とget_local_data()がそれぞれ別々のスレッドで非同期に実行され、クライアントにはそれぞれの処理が開始したことを通知しますが、結果は待機中には返されません。