如何从另一个Python文件中以模块的形式运行Uvicorn FastAPI服务器?
如何从另一个Python文件中以模块的形式运行Uvicorn FastAPI服务器?
我想要使用Uvicorn从不同的Python文件中运行FastAPI服务器。
uvicornmodule/main.py
import uvicorn import webbrowser from fastapi import FastAPI from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles app = FastAPI() import os script_dir = os.path.dirname(__file__) st_abs_file_path = os.path.join(script_dir, "static/") app.mount("/static", StaticFiles(directory=st_abs_file_path), name="static") @app.get("/") async def index(): return FileResponse('static/index.html', media_type='text/html') def start_server(): # print('Starting Server...') uvicorn.run( "app", host="0.0.0.0", port=8765, log_level="debug", reload=True, ) # webbrowser.open("http://127.0.0.1:8765") if __name__ == "__main__": start_server()
因此,我想从下面的test.py
文件中运行FastAPI服务器:
from uvicornmodule import main main.start_server()
然后,我运行python test.py
。
但是我收到以下错误:
RuntimeError: 在当前进程完成引导阶段之前,尝试启动新进程。 这可能意味着您没有使用fork来启动子进程,并且忘记在主模块中使用正确的习惯用法: if __name__ == '__main__': freeze_support() ... 如果程序不会被冻结以生成可执行文件,则可以省略"freeze_support()"行。
我做错了什么?我需要将该模块作为包运行。