KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

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()がそれぞれ別々のスレッドで非同期に実行され、クライアントにはそれぞれの処理が開始したことを通知しますが、結果は待機中には返されません。