खोज…


परिचय

विंडोज में हेडलेस प्रोसेस (बिना UI के) को सर्विसेज कहा जाता है। टास्क मैनेजर में कमांड कंसोल, पॉवर्सशेल या सर्विसेज टैब जैसे मानक विंडोज नियंत्रण का उपयोग करके उन्हें नियंत्रित (शुरू, रोका, आदि) किया जा सकता है। एक अच्छा उदाहरण एक एप्लिकेशन हो सकता है जो नेटवर्क सेवाएं प्रदान करता है, जैसे कि वेब एप्लिकेशन, या शायद एक बैकअप एप्लिकेशन जो विभिन्न पृष्ठभूमि अभिलेखीय कार्यों को करता है। विंडोज में एक सेवा के रूप में पायथन एप्लिकेशन को बनाने और स्थापित करने के कई तरीके हैं।

एक पायथन लिपि जिसे सेवा के रूप में चलाया जा सकता है

इस उदाहरण में प्रयुक्त मॉड्यूल pywin32 (विंडोज एक्सटेंशन के लिए पायथन) का हिस्सा हैं। आपने पायथन को कैसे स्थापित किया, इसके आधार पर, आपको इसे अलग से स्थापित करने की आवश्यकता हो सकती है।

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)

यह सिर्फ बॉयलरप्लेट है। आपका एप्लिकेशन कोड, शायद एक अलग स्क्रिप्ट को लागू कर रहा है, मुख्य () फ़ंक्शन में जाएगा।

आपको इसे सेवा के रूप में भी इंस्टॉल करना होगा। इस समय के लिए सबसे अच्छा समाधान गैर-चूसने वाले सेवा प्रबंधक का उपयोग करना प्रतीत होता है। यह आपको एक सेवा स्थापित करने की अनुमति देता है और सेवा निष्पादित होने वाली कमांड लाइन को कॉन्फ़िगर करने के लिए एक जीयूआई प्रदान करता है। अजगर के लिए आप ऐसा कर सकते हैं, जो एक बार में सेवा का निर्माण करता है:

nssm install MyServiceName c:\python27\python.exe c:\temp\myscript.py

जहाँ my_script.py उपर्युक्त बॉयलरप्लेट स्क्रिप्ट है, आपके एप्लिकेशन स्क्रिप्ट या कोड को मुख्य () फ़ंक्शन में शामिल करने के लिए संशोधित किया गया है। ध्यान दें कि सेवा सीधे पायथन स्क्रिप्ट नहीं चलाती है, यह पायथन इंटरप्रेटर चलाता है और इसे कमांड लाइन पर मुख्य स्क्रिप्ट पास करता है।

वैकल्पिक रूप से आप अपने ऑपरेटिंग सिस्टम संस्करण के लिए Windows सर्वर संसाधन किट में दिए गए टूल का उपयोग कर सकते हैं ताकि सेवा का निर्माण किया जा सके।

एक सेवा के रूप में फ्लास्क वेब अनुप्रयोग चलाना

यह जेनेरिक उदाहरण पर एक बदलाव है। आपको बस अपनी ऐप स्क्रिप्ट आयात करने की आवश्यकता है और इसे सेवा के main() फ़ंक्शन में run() विधि है। इस मामले में हम WSGIRequestHandler तक पहुँचने वाले मुद्दे के कारण मल्टीप्रोसेसिंग मॉड्यूल का उपयोग कर रहे हैं।

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

from app import app


class Service(win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"
    _svc_description_ = "Tests Python service framework by receiving and echoing messages over a named pipe"

    def __init__(self, *args):
        super().__init__(*args)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.process.terminate()
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)

    def SvcDoRun(self):
        self.process = Process(target=self.main)
        self.process.start()
        self.process.run()

    def main(self):
        app.run()


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

Http://stackoverflow.com/a/25130524/318488 से अनुकूलित



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow