重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
from sklearn.svm import SVC
目前创新互联已为近千家的企业提供了网站建设、域名、虚拟空间、网站托管、服务器租用、企业网站设计、宁夏网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
model = SVC()
model.fit(X_train, y_train)
model.predict(X_test) # 输出类别
model.predict_proba(X_test) # 输出分类概率
model.predict_log_proba(X_test) # 输出分类概率的对数
简单的解释一下:
在类win32test的__init__函数执行完毕后,系统服务就算是启动成功了(启动)
这时windows系统会自动调用SvcDoRun函数,该函数不可以结束;如果该函数结束就表示服务停止。你的程序不管是放在__init__中以线程方式启动还是放在SvcDoRun函数中调用,必须确保该函数不退出。如果没有该函数,系统会提示该服务没什么事可作,然后就会停止服务。(正在运行)
当停止该服务时,系统会调用SvcStop函数,该函数通过某种方式(例如标志位)让SvcDoRun函数退出,服务就算是正常停止了。例子中是通过event事件让SvcDoRun函数停止等待,从而退出的。(停止)
注意:Windows系统关机时,是不会调用终止函数的。
在类win32test中你可以定义其他的方法(函数),用于自己的代码设计;这与普通的python类没有什么不同。
===========================================
监控文件夹需要记录的内容很多,文件夹的内容变化可能包括文件数量的变化,文件大小的变化,文件修改时间的变化,文件名称的变化等等,其中文件大小的变化必然引起修改时间的变化。
监测过程可以在一个循环中采用定时检测的方式,比如每1秒中检查一次,这主要是看应用的需求。在有变化时,可以针对该目录调用处理函数,将该目录作为处理函数的参数。如果仅仅是对变化的文件调用处理函数,一般是在循环检测时一并处理。处理函数要对新建文件、更改的文件、重命名的文件和删除的文件分别处理。同时还要记录此次检查时文件夹的状态,以便于下次循环检测进行比较。
还要注意测试一下对正在编辑的文件是否有影响。
如果在该文件夹中可能产生临时文件(例如打开word文件时会有临时文件出现),还要考虑如何避开临时文件的处理。
努力锻炼学习吧
楼主怎么又来问这个问题?不是已经问过一遍了吗?这么久还没有搞定?
SvcDoRun运行结束就表示系统服务“停止”,怎么会重新运行?
上面的程序在开始添加两行代码:
import time
timeout = 10 #此处是延时时间,单位秒
改写部分代码:
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.running = True
def SvcDoRun(self):
while self.running:
#调用你的程序代码或者函数,以下的部分是计时代码
i = 0
while self.running and (itimeout):
time.sleep(1)
i += 1
def SvcStop(self):
self.running = False
这三个函数完全替代原有的代码
代码 import win32event 可以去除
计时代码之所以不直接写 time.sleep(timeout),主要原因是当timeout比较长时,会引起停止服务时失败,windows系统在停止服务时会有一定的等待时间,但时间不长,现在的计时代码是一秒钟检查一次是否停止,肯定不会带来问题。
你可以使用 pythoncom 库,它包含ActivePython 或者可以安装pywin32 (Python for Windows extensions).
下面是一个简单操作服务的例子:
import pythoncom
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "TestService"
_svc_display_name_ = "Test Service"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
pass
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
你的代码需要放在mian()方法里面,通常会有一些情况通过检查你在 SvcStop 方法中设置的标志,然后中断循环