如何从另一个Python文件中以模块的形式运行Uvicorn FastAPI服务器?

5 浏览
0 Comments

如何从另一个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()"行。

我做错了什么?我需要将该模块作为包运行。

0