mirror of
https://github.com/janLo/punkow
synced 2026-06-19 15:38:00 +00:00
Fix graceful shutdown hang
This commit is contained in:
+7
-2
@@ -38,9 +38,11 @@ def main(host, port, db, interval, debug, tz, special,
|
||||
|
||||
logging.basicConfig(
|
||||
level=level,
|
||||
# format='%(asctime)s %(levelname)s: %(message)s',
|
||||
format='%(levelname)s: %(name)s: %(message)s',
|
||||
datefmt='%Y-%m-%d %H:%M:%S')
|
||||
|
||||
logger = logging.getLogger("booking_service")
|
||||
|
||||
db_mngr = model.DatabaseManager(db)
|
||||
db_mngr.create_schema()
|
||||
|
||||
@@ -55,12 +57,15 @@ def main(host, port, db, interval, debug, tz, special,
|
||||
wrk.start()
|
||||
|
||||
app = interface.App(db_mngr, mail, base_url=url)
|
||||
loop.create_task(app.register_server(host, port))
|
||||
loop.create_task(app.start(host, port))
|
||||
|
||||
def stop():
|
||||
logger.info("Stop Punkow ... ")
|
||||
|
||||
async def _do_stop():
|
||||
await asyncio.gather(wrk.stop(), app.stop())
|
||||
loop.stop()
|
||||
logger.info("Goodbye!")
|
||||
|
||||
loop.create_task(_do_stop())
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ class App(object):
|
||||
def run(self, host: str = None, port: int = None):
|
||||
web.run_app(self.app, host=host, port=port)
|
||||
|
||||
async def register_server(self, host: str = None, port: int = None):
|
||||
async def start(self, host: str = None, port: int = None):
|
||||
app_runner = web.AppRunner(self.app, access_log=logger)
|
||||
await app_runner.setup()
|
||||
self.site = web.TCPSite(app_runner, host, port)
|
||||
|
||||
@@ -78,7 +78,7 @@ class Timer(object):
|
||||
elapsed = (end - start).total_seconds()
|
||||
sleep = max(0.0, self._wait_time(end) - elapsed)
|
||||
logger.debug("Booking run completed in %0.2f seconds - now sleep for %0.2f seconds", elapsed, sleep)
|
||||
self._sleep_coro = asyncio.sleep(sleep)
|
||||
self._sleep_coro = asyncio.ensure_future(asyncio.sleep(sleep))
|
||||
try:
|
||||
await self._sleep_coro
|
||||
except asyncio.CancelledError:
|
||||
|
||||
@@ -208,5 +208,7 @@ class Worker(object):
|
||||
self._running = False
|
||||
|
||||
if self._run_future is not None:
|
||||
self._timer.cancel()
|
||||
|
||||
await self._run_future
|
||||
self._run_future = None
|
||||
|
||||
Reference in New Issue
Block a user