标签:python windows cross-platform
我正在描绘一组程序的架构,这些程序共享存储在数据库中的各种相互关联的对象.我希望其中一个程序充当服务,为这些对象的操作提供更高级别的接口,以及通过该服务访问对象的其他程序.
我目前的目标是将Python和Django框架作为实现该服务的技术.我很确定我想知道如何在Linux中守护Python程序.但是,它是系统应支持Windows的可选规范项.我对Windows编程没什么经验,也没有Windows服务的经验.
是否可以将Python程序作为Windows服务运行(即在没有用户登录的情况下自动运行)?我不一定要实现这一部分,但我需要大致了解如何做以决定是否按照这些方式进行设计.
编辑:感谢目前为止的所有答案,它们非常全面.我想知道一件事:Windows如何了解我的服务?我可以使用本机Windows实用程序进行管理吗?在/etc/init.d中放置一个启动/停止脚本相当于什么?
解决方法:
是的你可以.我使用ActivePython附带的pythoncom库或者可以安装pywin32(Python for Windows扩展)来实现.
这是简单服务的基本框架:
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)
您的代码将进入main()方法 – 通常使用某种无限循环,可能会通过检查您在SvcStop方法中设置的标志来中断
标签:python,windows,cross-platform 来源: https://codeday.me/bug/20190911/1803443.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。