mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Gracefully exit with async logger (#4965)
* Gracefully exit with async logger * Lint
This commit is contained in:
parent
a4a38c8a00
commit
31fe1d28e8
@ -298,9 +298,8 @@ class HomeAssistant(object):
|
|||||||
# cleanup async layer from python logging
|
# cleanup async layer from python logging
|
||||||
if self.data.get(DATA_ASYNCHANDLER):
|
if self.data.get(DATA_ASYNCHANDLER):
|
||||||
handler = self.data.pop(DATA_ASYNCHANDLER)
|
handler = self.data.pop(DATA_ASYNCHANDLER)
|
||||||
logger = logging.getLogger('')
|
logging.getLogger('').removeHandler(handler)
|
||||||
handler.close()
|
yield from handler.async_close(blocking=True)
|
||||||
logger.removeHandler(handler)
|
|
||||||
|
|
||||||
self.loop.stop()
|
self.loop.stop()
|
||||||
|
|
||||||
|
@ -49,6 +49,23 @@ class AsyncHandler(object):
|
|||||||
"""Wrap close to handler."""
|
"""Wrap close to handler."""
|
||||||
self.emit(None)
|
self.emit(None)
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def async_close(self, blocking=False):
|
||||||
|
"""Close the handler.
|
||||||
|
|
||||||
|
When blocking=True, will wait till closed.
|
||||||
|
"""
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
if blocking:
|
||||||
|
# Python 3.4.4+
|
||||||
|
# pylint: disable=no-member
|
||||||
|
if hasattr(self._queue, 'join'):
|
||||||
|
yield from self._queue.join()
|
||||||
|
else:
|
||||||
|
while not self._queue.empty():
|
||||||
|
yield from asyncio.sleep(0, loop=self.loop)
|
||||||
|
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
"""Process a record."""
|
"""Process a record."""
|
||||||
ident = self.loop.__dict__.get("_thread_ident")
|
ident = self.loop.__dict__.get("_thread_ident")
|
||||||
@ -66,15 +83,23 @@ class AsyncHandler(object):
|
|||||||
|
|
||||||
def _process(self):
|
def _process(self):
|
||||||
"""Process log in a thread."""
|
"""Process log in a thread."""
|
||||||
|
support_join = hasattr(self._queue, 'task_done')
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
record = run_coroutine_threadsafe(
|
record = run_coroutine_threadsafe(
|
||||||
self._queue.get(), self.loop).result()
|
self._queue.get(), self.loop).result()
|
||||||
|
|
||||||
|
# pylint: disable=no-member
|
||||||
|
|
||||||
if record is None:
|
if record is None:
|
||||||
self.handler.close()
|
self.handler.close()
|
||||||
|
if support_join:
|
||||||
|
self.loop.call_soon_threadsafe(self._queue.task_done)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.handler.emit(record)
|
self.handler.emit(record)
|
||||||
|
if support_join:
|
||||||
|
self.loop.call_soon_threadsafe(self._queue.task_done)
|
||||||
|
|
||||||
def createLock(self):
|
def createLock(self):
|
||||||
"""Ignore lock stuff."""
|
"""Ignore lock stuff."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user