• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

flask async

date: 2022-02-20 excerpt: flaskでのasyncのやり方

tag: flaskceleryapi


flaskでasyncのやり方

概要

  • taskが完了する前にリターンコードを返す
  • 実装方法は様々にあるが、/celery/を用いてRPCのtaskにする

flaskによるasyncに対応した最小限のサーバの実装例

celeryのタスク

  • bin/task.pyのようなファイルにする
  • celery -A bin.task worker --concurrency=1 --loglevel=CRITICALを実行する
from celery import Celery

BROKER_URL = 'redis://localhost:6379/0'
BACKEND_URL = 'redis://localhost:6379/1'
app = Celery('tasks', broker=BROKER_URL, backend=BACKEND_URL)

@app.task
def job(arg):
    ... # なにか重い処理
    return True

flaskのコードからceleryのタスクを呼ぶ

  • celeryのタスクを定義したファイルをimportする
  • celeryのIFで対象の関数を呼び出すと、非同期としてあつかえる
from flask import Flask, request
from .task import job

# 取得
@app.route('/', methods=["GET"])
def home():
    obj = request.get_json()
    result = job.delay(obj) # ここで非同期にジョブが実行可能
    return f"async_job started. id = {result.id}", 200

if __name__ == '__main__':
    app.run(debug=True)


flaskceleryapi Share Tweet