FastAPI 作为 Windows 服务

FastAPI 作为 Windows 服务

在本文中,我们将介绍如何将FastAPI应用程序作为Windows服务运行,以便在Windows环境下实现自动启动和后台运行。

阅读更多:FastAPI 教程

什么是FastAPI?

FastAPI是一个基于Python的现代、快速(高性能)、Web框架,用于构建API。它具有简单易用的语法和丰富的功能,可以快速搭建高性能的Web应用程序。

将FastAPI应用作为Windows服务

在某些情况下,我们希望将FastAPI应用程序作为Windows服务运行,以便在系统启动时自动启动,并在后台持续运行。这样可以确保程序一直运行,即使没有用户登录或运行终端。

要将FastAPI应用程序作为Windows服务运行,我们可以使用第三方库pywin32来实现。以下是实现的步骤:

  1. 安装pywin32库:在命令行中运行pip install pywin32,以安装pywin32库。

  2. 创建一个Python脚本:创建一个新的Python脚本文件,并导入必要的模块,如下所示:

# 导入所需模块
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import os
import sys
import subprocess
import time
import signal

# 定义FastAPI应用程序的路径
APP_PATH = "path_to_your_fastapi_app.py"

# 定义服务类
class FastAPIService(win32serviceutil.ServiceFramework):
    _svc_name_ = "FastAPIService"
    _svc_display_name_ = "FastAPI Service"

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)
        self.is_running = True

    # 启动服务
    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))
        self.main()

    # 停止服务
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.is_running = False

    # 运行主函数
    def main(self):
        while self.is_running:
            # 启动FastAPI应用程序
            self.start_fastapi_app()
            # 检测FastAPI应用程序是否正在运行,如果不在运行则重启
            while self.is_running and self.is_fastapi_app_running():
                time.sleep(5)
            time.sleep(5)

    # 启动FastAPI应用程序
    def start_fastapi_app(self):
        subprocess.Popen([sys.executable, APP_PATH])

    # 检测FastAPI应用程序是否正在运行
    def is_fastapi_app_running(self):
        with subprocess.Popen(["tasklist", "/FI", "IMAGENAME eq python.exe"], stdout=subprocess.PIPE,
            shell=True, preexec_fn=os.setsid) as proc:
            output = proc.stdout.read().decode('gbk')
            return APP_PATH in output


# 定义服务入口函数
def main():
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(FastAPIService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(FastAPIService)

# 运行服务
if __name__ == '__main__':
    main()
  1. 修改APP_PATH:将上述代码中的APP_PATH变量更改为您实际的FastAPI应用程序路径。

  2. 安装服务:在命令行中运行python your_script_name.py install,将上述Python脚本作为一个Windows服务进行安装。

  3. 启动服务:在命令行中运行python your_script_name.py start,启动FastAPI应用程序作为一个Windows服务运行。

  4. 停止服务:在命令行中运行python your_script_name.py stop,停止FastAPI应用程序的运行。

通过上述步骤,我们可以将FastAPI应用程序作为Windows服务运行。当系统启动时,服务将自动启动,并在后台持续运行。

总结

本文介绍了如何将FastAPI应用程序作为Windows服务运行。通过将FastAPI应用程序作为服务,在Windows环境下实现了自动启动和后台运行,确保应用程序持续运行。希望本文对于希望在Windows环境下部署FastAPI应用程序的开发者有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程