Remove polling in webserver, use property instead
This commit is contained in:
parent
613faf84ef
commit
fb8f200291
@ -26,7 +26,6 @@ import sys
|
|||||||
import time
|
import time
|
||||||
import signal
|
import signal
|
||||||
import os
|
import os
|
||||||
import threading
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from httpbin.core import app
|
from httpbin.core import app
|
||||||
@ -70,12 +69,26 @@ def log_request(response):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def ready_checker(server):
|
class WSGIServer(cherrypy.wsgiserver.CherryPyWSGIServer):
|
||||||
"""Wait until the server is ready and display the ready message."""
|
"""A custom WSGIServer that prints a line on stderr when it's ready."""
|
||||||
while not server.ready:
|
# pylint: disable=no-member
|
||||||
time.sleep(0.2)
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self._ready = False
|
||||||
|
self._printed_ready = False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ready(self):
|
||||||
|
return self._ready
|
||||||
|
|
||||||
|
@ready.setter
|
||||||
|
def ready(self, value):
|
||||||
|
if value and not self._printed_ready:
|
||||||
print(' * Running on http://127.0.0.1:{}/ (Press CTRL+C to quit)'
|
print(' * Running on http://127.0.0.1:{}/ (Press CTRL+C to quit)'
|
||||||
.format(server.bind_addr[1]), file=sys.stderr, flush=True)
|
.format(self.bind_addr[1]), file=sys.stderr, flush=True)
|
||||||
|
self._printed_ready = True
|
||||||
|
self._ready = value
|
||||||
|
|
||||||
|
|
||||||
def shutdown(*args):
|
def shutdown(*args):
|
||||||
@ -91,11 +104,8 @@ def main():
|
|||||||
basedir = os.path.realpath(os.path.dirname(sys.executable))
|
basedir = os.path.realpath(os.path.dirname(sys.executable))
|
||||||
app.template_folder = os.path.join(basedir, 'integration', 'templates')
|
app.template_folder = os.path.join(basedir, 'integration', 'templates')
|
||||||
port = int(sys.argv[1])
|
port = int(sys.argv[1])
|
||||||
server = cherrypy.wsgiserver.CherryPyWSGIServer( # pylint: disable=no-member
|
server = WSGIServer(('0.0.0.0', port), app)
|
||||||
('0.0.0.0', port), app)
|
|
||||||
|
|
||||||
checker = threading.Thread(target=ready_checker, args=[server])
|
|
||||||
checker.start()
|
|
||||||
signal.signal(signal.SIGTERM, shutdown)
|
signal.signal(signal.SIGTERM, shutdown)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user