যদি অন্য কেউ যদি উইন 32 পরিষেবাটির মধ্যে ফ্লাস্ক সার্ভারটি বন্ধ করতে চান তবে তা এখানে। এটি বেশ কয়েকটি পদ্ধতির এক বিস্ময়কর সমন্বয়, তবে এটি ভালভাবে কাজ করে। মূল ধারণা:
- এগুলি
shutdown
শেষ বিন্দু যা গ্রেফিউস শাটডাউনের জন্য ব্যবহার করা যেতে পারে। দ্রষ্টব্য : এটি নির্ভর করে request.environ.get
যা কেবলমাত্র ওয়েব অনুরোধের প্রসঙ্গে (অভ্যন্তরীণ @app.route
ফাংশন) এর মধ্যে ব্যবহারযোগ্য
- win32service এর
SvcStop
পদ্ধতিটি requests
পরিষেবাটিতে নিজেই HTTP অনুরোধ করতে ব্যবহার করে।
myservice_svc.py
import win32service
import win32serviceutil
import win32event
import servicemanager
import time
import traceback
import os
import myservice
class MyServiceSvc(win32serviceutil.ServiceFramework):
_svc_name_ = "MyServiceSvc"
_svc_display_name_ = "Display name"
_svc_description_ = "Description"
def __init__(self, args):
os.chdir(os.path.dirname(myservice.__file__))
win32serviceutil.ServiceFramework.__init__(self, args)
def SvcDoRun(self):
myservice.start()
def SvcStop(self):
"""Called when we're being shut down"""
myservice.stop()
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STOPPED,
(self._svc_name_, ''))
if __name__ == '__main__':
os.chdir(os.path.dirname(myservice.__file__))
win32serviceutil.HandleCommandLine(MyServiceSvc)
myservice.py
from flask import Flask, request, jsonify
cli = sys.modules['flask.cli']
cli.show_server_banner = lambda *x: None
app = Flask('MyService')
@app.route("/shutdown", methods=['GET'])
def shutdown():
shutdown_func = request.environ.get('werkzeug.server.shutdown')
if shutdown_func is None:
raise RuntimeError('Not running werkzeug')
shutdown_func()
return "Shutting down..."
def start():
app.run(host='0.0.0.0', threaded=True, port=5001)
def stop():
import requests
resp = requests.get('http://localhost:5001/shutdown')