# Fastapi **Repository Path**: wanglv110/fastapi ## Basic Information - **Project Name**: Fastapi - **Description**: 使用python写的简易api服务程序,使用的是FastApi服务。 1. 实现了spark通过rest api接口提交程序的功能。 2. 大模型api服务 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-08 - **Last Updated**: 2025-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 我已经有一个写好的spark程序的jar包了,使用FastAPI来形成一个服务,通过调用spark-submit来提交spark 任务到集群中 ## 一 环境准备 ### 1 推荐python3.6以上版本 ```` linux 安装 conda python 1 下载安装conda wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh 运行此脚本,直接安装conda 如果安装时没有初始化,则手动初始化conda /root/anaconda3/bin/conda init 查看conda安装版本,安装完成 conda --version 2 用conda创建自定义的python环境 创建虚拟环境 conda create -n spark_311 python=3.11 查看环境: conda env list 切换环境 conda activate spark_311 卸载环境 conda remove --name spark_311 --all ```` ### 2 FastAPI 及相关依赖安装:使用pip命令安装安装了FastAPI和uvicorn(一个ASGI服务器,用于运行FastAPI应用): ``` pip install fastapi uvicorn ``` ## 二 运行FastAPI 服务 ```` uvicorn spark_server.py:app --reload uvicorn spark_server:app --host 0.0.0.0 --port 60100 --workers 4 --limit-concurrency 100 --limit-max-requests 500 --access-log --use-colors --proxy-headers ```` 说明: spark_service.py: 是代码所在的 Python 文件名 app:是FastAPI 应用的那个实例对象,指的是代码中的app = FastAPI()这个实例对象 --host: 指定服务器应该监听的 IP 地址。默认为 127.0.0.1。 --port: 指定服务器应该监听的端口。默认为 8000。 --reload: 启用自动重载。当源代码发生变化时,服务器将自动重启。这在开发阶段非常有用。 --workers: 指定工作进程的数量。默认为 1。在生产环境中,通常会设置大于1的值来利用多核处理器。 --limit-concurrency: 限制同时处理的请求数量。默认情况下没有限制。 --limit-max-requests: 每个工作进程在重启之前可以处理的最大请求数量。默认情况下没有限制。 --backlog: 指定最大挂起连接数。默认为 2048。 --access-log: 启用访问日志。可以设置为 False 来禁用。 --use-colors: 在日志中使用颜色。默认为 True。 --proxy-headers: 启用 X-Forwarded-For 和 X-Forwarded-Proto 头部支持,这在代理后面运行 Uvicorn 时很有用。 启动后,服务默认会监听http://127.0.0.1:8000 这个地址,启动后就可以调用服务了 ### 三 生产环境运行 在生产环境中,通常不推荐直接使用 uvicorn 命令来运行服务,因为它会在前台运行,并且当你关闭终端时服务也会停止。 为了在后台持续运行服务,你可以使用一些工具来守护进程,例如 systemd、supervisord 或 nohup。 1 生产时后台运行 ```` conda activate spark_311 nohup uvicorn --app-dir /data/app/fastapi spark_server:app --host 0.0.0.0 --port 60100 --workers 2 &> /data/app/fastapi/out.log & ```` 2 把python项目部署为systemctl服务 /etc/systemd/system 目录下新建一个文件fastapi.service 添加以下内容 ```` [Unit] Description=FastAPI service After=network.target [Service] User=root Group=root WorkingDirectory=/data/app/fastapi Environment="PATH=/root/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ExecStart=/root/anaconda3/bin/conda run -n spark_311 uvicorn --app-dir /data/app/fastapi spark_server:app --host 0.0.0.0 --port 60100 --workers 2 [Install] WantedBy=multi-user.target ```` systemctl 服务命令: 重新加载Systemd以识别新服务: systemctl daemon-reload 启用服务/开机自启: systemctl enable fastapi.service 启动服务: systemctl start fastapi.service 停止服务: systemctl stop fastapi.service 检查服务状态: systemctl status fastapi.service