自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • FastAPIでWebSocketを実現する

    djangoでもWebSocketは実現できるが、依然djangoの一部は同期動作(DB操作とMIDDLEWARE)。 よって、どうしてもボトルネックが発生する。 そこでWebSocketは、djangoではなく、非同期処理を前提として作られたFastAPIに委ねることで、より高速なWebSocketを実現させる。 本記事では、FastAPIを使ってのWebSocketを実現させる。 ただし、セキュリティ ...
  • FastAPIでDjangoのORMを使う

    Djangoの処理の一部をFastAPIで分離、FastAPI内でDjangoのORMを使ってDBの読み込みをする。 実装方法と手順 FastAPIでDjangoの設定を読み込み Djangoのモデルをimportする sync_to_asyncデコレータでラップされた関数内でモデルを使う モデルオブジェクトをそのままreturn してはいけない。 FastAPIでDjangoの設定を読み込み まず、FastAP ...
  • 非同期リクエスト vs マルチスレッドリクエスト vs 直列リクエスト

    先の記事でI/Oバウンドの処理は、非同期処理が最適であるとわかった。 本記事では、それがはっきりとわかるコードを用意した。 非同期で大量のリクエストを送信し、レスポンスを受け取る。その処理時間を計測する。 比較のため、マルチスレッド、直列動作のコードも用意した。 使用ライブラリ pip install aiohttp requests fastapi uvicorn aiohappyeyeballs==2.4.4 aiohttp==3.11.11 aiosignal==1.3.2 annotated-types==0.7.0 anyio==4.8.0 async-timeout==5.0.1 attrs==25.1.0 certifi==2024.12.14 charset-normalizer==3.4.1 click==8.1.8 exceptiongroup==1.2.2 fastapi==0.115.7 frozenlist==1.5.0 h11==0.14.0 idna==3.10 multidict==6.1.0 propcache==0.2.1 pydantic==2.10.6 pydantic_core==2.27.2 requests==2.32.3 sniffio==1.3.1 starlette==0.45.3 typing_extensions==4.12.2 urllib3==2.3.0 uvicorn==0.34.0 yarl==1.18.3 非同期リクエストには、aiohttp を使う。通常の requests では非同期リク ...
  • 非同期処理(async、await)とマルチスレッド(threading)とマルチプロセス(multiprocessing)の違い

    FastAPIやWebSocketで非同期処理を扱うようになったため、非同期処理とマルチスレッドとマルチプロセスの違いをまとめる。 この違いは非常に複雑で難解。 まずはPythonのGILについて解説する。 GIL とは? Global Interpreter Lock の略。pythonのCPython実装時に追加された、スレッドの排他制御メカニズムのこと。 このGILの仕組みにより、複数のスレッドがPythonのオブジェクトにアクセスできないようにし ...
  • FastAPIでHelloworldとインストール

    FastAPI とは? FastAPIは、高性能なウェブアプリケーションフレームワークで、Python3.8以上で動く。APIサーバーをつくることができる。 非同期(ASGI)をネイティブにサポートしているため、1スレッドで複数のリクエストを捌くことができる。 FastAPIでは非同期対応により、I/O待機時間を減らし、CPUリソースをフル活用できる。 インストール pip install fastapi uvicorn main.py をつくる from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Hello, World!"} サーバー ...