【问题标题】:python Win service with multiprocessing error带有多处理错误的python Win服务
【发布时间】:2018-01-30 07:28:20
【问题描述】:

我由 py2exe exe 程序创建,它使用多处理并且工作正常!但是,当我尝试使用 win32serviceutil 创建 Windows 服务时,win32service 出现错误 - 无法腌制它未找到为 builtin_PYHANDLE。

这是我的代码:

 import win32serviceutil
 import win32service
 import win32event
 import servicemanager
 from multiprocessing import Process 
 import time
 import datetime

 class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "Siemens Service Reader"
_svc_display_name_ = "Siemens Service Reader"
_svc_description_ = "__read data from siemens controller 169.254.0.201" 
def __init__(self,args):
    win32serviceutil.ServiceFramework.__init__(self,args)
    self.hWaitStop = win32event.CreateEvent(None,0,0,None)
    self.hWaitResume = win32event.CreateEvent(None, 0, 0, None)
    self.timeout = 2000  
    self.resumeTimeout = 2000
    self._paused = False

 ... description of service
 ... service functions     
def SvcDoRun(self):
    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))
    self.main()  

def connect_controller(self):
    pass

def connect_controller2(self):
    pass

def main(self):
    servicemanager.LogInfoMsg("Starting Siemens reader service...")
    while True:
        p = Process(target= self.connect_controller)
        p.start()

        p2 = Process(target=self.connect_controller)
        p2.start()

        p.join()
        p2.join()
        rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout)
        if rc == win32event.WAIT_OBJECT_0:
            servicemanager.LogInfoMsg("Siemens reading is stopping")
        if self._paused:
            servicemanager.LogInfoMsg("Siemens reading is on pause")              
        while self._paused:
            rc = win32event.WaitForSingleObject(self.hWaitResume, self.resumeTimeout)
            if rc == win32event.WAIT_OBJECT_0:
                self._paused = False
                servicemanager.LogInfoMsg("Yeah! Let's continue!")
                break                  

if __name__ == '__main__':
     win32serviceutil.HandleCommandLine(AppServerSvc)

有人可以帮忙吗? 如何腌制函数对象?

【问题讨论】:

    标签: python windows-services multiprocessing


    【解决方案1】:

    如果这不仅仅是复制粘贴错误,那么您(可能)在 _svc_description_ 末尾缺少"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2011-04-11
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多