Remove polling in webserver, use property instead

This commit is contained in:
Daniel Schadt 2015-11-20 16:11:13 +01:00
parent 613faf84ef
commit fb8f200291

View File

@ -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: