如果我们需要将程序一直保持在后台运行,一般都会做成服务在后台运行,但是具体要如何实现呢,我这边提供源代码,只需要将标注的部分改成自己的代码即可
方法/步骤
-
1
import win32serviceutil
import win32service
import win32event
import os
import socket
class PythonService(win32serviceutil.ServiceFramework):
#服务名
_svc_name_ = "weater"
#服务显示名称
_svc_display_name_ = "weater"
#服务描述
_svc_description_ = "天气服务"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
self.isAlive = True
def SvcDoRun(self):
import time
while self.isAlive:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1', 80))
if result != 0:
os.popen('python D:\\test\\web_Django\\we\\manage.py runserver 0.0.0.0:80')
time.sleep(8)
sock.close()
time.sleep(20)
def SvcStop(self):
# 先告诉SCM停止这个过程
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# 设置事件
win32event.SetEvent(self.hWaitStop)
self.isAlive = False
if __name__=='__main__':
win32serviceutil.HandleCommandLine(PythonService)
-
2
只需要将代码中的
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1', 80))
if result != 0:
os.popen('python D:\\test\\web_Django\\we\\manage.py runserver 0.0.0.0:80')
time.sleep(8)
sock.close()
替换成自己需要执行的事件即可,我这个示例的意思是循环监控80端口是否是开启状态,如果关闭了就执行启动命令,用于实现程序的后台稳定运行。
-
3
Windows下将服务安装到系统方法:
安装服务
python PythonService.py install
让服务自动启动
python PythonService.py --startup auto install
启动服务
python PythonService.py start
重启服务
python PythonService.py restart
停止服务
python PythonService.py stop
删除/卸载服务
python PythonService.py remove
使用pyinstaller打包为exe可放到任意机器上安装服务:D:\python\Scripts>pyinstaller -F --hidden-import=win32timezone D:\test\test.py
END
文章评论