最简单的方法是使用: NSSM - 非吸管服务管理器。只需下载并解压到您选择的位置即可。它是一个自包含的实用程序,大小约为300KB(比仅出于此目的安装整个pywin32套件要少得多),不需要进行"安装"。zip文件包含该实用程序的64位和32位版本。任何一个版本都可以在当前系统上良好运行(您可以使用32位版本来管理64位系统上的服务)。
图形用户界面(GUI)方法
1- 将Python程序安装为服务。以管理员身份打开Win提示符
c:\>nssm.exe install WinService
2-在NSSM的图形用户界面控制台上:
路径:C:\Python27\Python27.exe
启动目录:C:\Python27
参数:c:\WinService.py
3-检查在services.msc上创建的服务
脚本方法(无GUI)
如果你的服务应该是自动化的、非交互式的程序的一部分,这将非常方便,这可能超出了你的控制,比如批处理程序或安装程序。假定使用管理员权限执行命令。
为了方便起见,在此将工具简单地称为nssm.exe
。然而,在脚本中最好更明确地引用它,使用其完整路径c:\path\to\nssm.exe
,因为它是一个自包含的可执行文件,可能位于系统未知的私有路径中。
1.安装服务
必须指定服务的名称、适当Python可执行文件的路径以及脚本的路径:
nssm.exe install ProjectService "c:\path\to\python.exe" "c:\path\to\project\app\main.py"
更明确地说:
nssm.exe install ProjectService
nssm.exe set ProjectService Application "c:\path\to\python.exe"
nssm.exe set ProjectService AppParameters "c:\path\to\project\app\main.py"
或者你可能希望将你的Python应用程序作为Python模块启动。一个简单的方法是告诉nssm它需要更改到正确的启动目录,就像你自己从命令行启动时所做的一样:
nssm.exe install ProjectService "c:\path\to\python.exe" "-m app.main"
nssm.exe set ProjectService AppDirectory "c:\path\to\project"
这种方法在虚拟环境和自包含的Python安装中表现良好。只需确保使用通常的方法正确解决了这些环境中的任何路径问题即可。如果需要,nssm可以设置环境变量(例如PYTHONPATH),还可以启动批处理脚本。
2. 启动服务
nssm.exe start ProjectService
3. 停止服务
nssm.exe stop ProjectService
4. 移除服务: 指定confirm
参数以跳过交互确认。
nssm.exe remove ProjectService confirm
socket.setdefaulttimeout(60)
是什么意思? 是服务需要用到它,还是只是无意中从某个现有服务复制过来的? :) 它的作用是设置socket模块的默认超时时间为60秒。这可能是为了在服务中保证网络连接的稳定性和可靠性。无法确定它是否是从其他服务中复制而来,还是特意添加的。 - Timsocket.setdefaulttimeout(60)
的原因是什么? - ThatAintWorking