使用Fastapi打包exe后无限启动导致死机的解决办法
作者:什么都干的派森
将 fastapi 服务打包成 exe 后双击执行,命令行中不断创建服务导致cpu吃满,最后死机,所以本文给大家介绍了Fastapi打包exe后无限启动导致死机的解决办法,需要的朋友可以参考下
一、问题
将 fastapi 服务打包成 exe 后双击执行,命令行中不断创建服务导致cpu吃满,最后死机
二、原因
fastapi 启动时指定了多个 workers 进程
uvicorn.run(app="jsonp_test:app", host="127.0.0.1", port=12233, workers=5)
直接运行 python 脚本不会报错,也不会导致无限启动的问题,不过一旦打包成 exe 就会无限启动子进程
三、解决办法
main 方法下加入这两行代码
import multiprocessing multiprocessing.freeze_support()
该方法作用是阻止子进程运行其后面的代码
完整代码如下
# coding:utf-8 from fastapi import FastAPI import uvicorn app = FastAPI() @app.get(f"/hello") async def hello(): return 'ok' if __name__ == '__main__': # 该方法作用是阻止子进程运行其后面的代码 ---- import multiprocessing multiprocessing.freeze_support() # ------------------------------------ # 打包前输出到命令行 uvicorn.run(app="jsonp_test:app", host="127.0.0.1", port=12233, workers=5)
这样再打包 exe 执行,就不会无限启动子进程撑爆 cpu 啦
知识拓展:
fastapi的两种运行方式
方式一
1.运行main1.py代码
2.在终端输入 uvicorn main1:app --reload
3.在浏览器网页输入对应网址
main1.py
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
方式二
1.运行main2.py代码
2.在浏览器网页输入对应网址
main2.py
from fastapi import FastAPI app = FastAPI() @app.get("/") async def main(): return {"messages": "helloworld, FastAPI"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="127.0.0.1", port=8000)
到此这篇关于Fastapi打包exe后无限启动导致死机的解决办法的文章就介绍到这了,更多相关Fastapi打包exe导致死机内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!