最近FastAPIについて勉強しているのですが、FastAPIのASGIサーバーとなるuvicornを起動するとERROR: [WinError 10013] アクセス許可で禁じられた方法でソケットにアクセスしようとしました。とエラーが表示されました。
チュートリアルで最もシンプルなプログラムをコピーして実行しただけなのに何故?
以前同じプログラムを実行したときはエラーにならなかったのに何故?・・・・
原因は同じポートでFastAPIを複数起動させようとしたためでした。
事象
ターミナルで実行したコマンド
uvicorn main:app --reload
記述したプログラム
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
エラー内容
ERROR: [WinError 10013] アクセス許可で禁じられた方法でソケットにアクセスしようとしました。
原因
原因は、すでにポート8000で別のFastAPIを起動した状態で実行したためでした。
uvicornをuvicorn main:app –reloadのようにポート指定せずに起動させると、ポート8000でデフォルト起動するようです。
※reloadオプションは、開発時のみに使用するソースが修正されると自動でuvicornが再起動される。
解決策
起動中のFastAPIを停止
同じポートでは、複数uvicornを起動できないので、どちらかのuvicornを停止させる。
片方のuvicornを停止後,再度uvicorn main:app –reloadをターミナルで実行すると問題なく起動できるようになる。
ポートを指定して起動
FastAPIを同時に複数起動させたい場合は、ポートを指定して起動することもできる。
その場合はオプション –port ポート番号 を付与する。
※ポート8000がすでに起動しているので8010で起動させる場合。
uvicorn main:app --reload --port 8010
コメント