changeset 224:4f00bb99400e

serve: Fix exiting the server with `CTRL+C` when the SSE response is running.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 03 Feb 2015 18:51:30 -0800
parents 7decf00eee47
children a75d024ee839
files piecrust/commands/builtin/serving.py piecrust/serving.py
diffstat 2 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/commands/builtin/serving.py	Tue Feb 03 18:50:58 2015 -0800
+++ b/piecrust/commands/builtin/serving.py	Tue Feb 03 18:51:30 2015 -0800
@@ -1,5 +1,5 @@
 import logging
-from piecrust.serving import Server
+from piecrust.serving import Server, _sse_abort
 from piecrust.commands.base import ChefCommand
 
 
@@ -48,10 +48,13 @@
 
         if ctx.args.wsgi == 'werkzeug':
             from werkzeug.serving import run_simple
-            run_simple(host, port, app,
-                       threaded=True,
-                       use_debugger=debug,
-                       use_reloader=ctx.args.use_reloader)
+            try:
+                run_simple(host, port, app,
+                           threaded=True,
+                           use_debugger=debug,
+                           use_reloader=ctx.args.use_reloader)
+            finally:
+                _sse_abort.set()
 
         elif ctx.args.wsgi == 'gunicorn':
             from gunicorn.app.base import BaseApplication
--- a/piecrust/serving.py	Tue Feb 03 18:50:58 2015 -0800
+++ b/piecrust/serving.py	Tue Feb 03 18:51:30 2015 -0800
@@ -26,6 +26,9 @@
 logger = logging.getLogger(__name__)
 
 
+_sse_abort = threading.Event()
+
+
 class ServingEnvironment(StandardEnvironment):
     pass
 
@@ -446,6 +449,9 @@
                 yield bytes(outstr, 'utf8')
                 break
 
+            if _sse_abort.is_set():
+                break
+
             try:
                 logger.debug("Polling pipeline status queue...")
                 count += 1