mirror of
https://github.com/spl0k/supysonic.git
synced 2024-12-23 01:16:18 +00:00
Try to terminate the daemon more gracefully
This commit is contained in:
parent
e6a192483c
commit
8d9b2658d2
@ -8,10 +8,11 @@
|
|||||||
# Distributed under terms of the GNU AGPLv3 license.
|
# Distributed under terms of the GNU AGPLv3 license.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
from multiprocessing.connection import Listener
|
from multiprocessing.connection import Listener, Client
|
||||||
from pony.orm import db_session, select
|
from pony.orm import db_session, select
|
||||||
from threading import Thread
|
from threading import Thread, Event
|
||||||
|
|
||||||
from .client import DaemonCommand
|
from .client import DaemonCommand
|
||||||
from ..db import Folder
|
from ..db import Folder
|
||||||
@ -29,6 +30,7 @@ class Daemon(object):
|
|||||||
self.__listener = None
|
self.__listener = None
|
||||||
self.__watcher = None
|
self.__watcher = None
|
||||||
self.__scanner = None
|
self.__scanner = None
|
||||||
|
self.__stopped = Event()
|
||||||
|
|
||||||
watcher = property(lambda self: self.__watcher)
|
watcher = property(lambda self: self.__watcher)
|
||||||
scanner = property(lambda self: self.__scanner)
|
scanner = property(lambda self: self.__scanner)
|
||||||
@ -36,7 +38,9 @@ class Daemon(object):
|
|||||||
def __handle_connection(self, connection):
|
def __handle_connection(self, connection):
|
||||||
cmd = connection.recv()
|
cmd = connection.recv()
|
||||||
logger.debug('Received %s', cmd)
|
logger.debug('Received %s', cmd)
|
||||||
if isinstance(cmd, DaemonCommand):
|
if cmd is None:
|
||||||
|
pass
|
||||||
|
elif isinstance(cmd, DaemonCommand):
|
||||||
cmd.apply(connection, self)
|
cmd.apply(connection, self)
|
||||||
else:
|
else:
|
||||||
logger.warn('Received unknown command %s', cmd)
|
logger.warn('Received unknown command %s', cmd)
|
||||||
@ -49,7 +53,12 @@ class Daemon(object):
|
|||||||
self.__watcher = SupysonicWatcher(self.__config)
|
self.__watcher = SupysonicWatcher(self.__config)
|
||||||
self.__watcher.start()
|
self.__watcher.start()
|
||||||
|
|
||||||
while True:
|
Thread(target=self.__listen).start()
|
||||||
|
while not self.__stopped.is_set():
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
def __listen(self):
|
||||||
|
while not self.__stopped.is_set():
|
||||||
conn = self.__listener.accept()
|
conn = self.__listener.accept()
|
||||||
self.__handle_connection(conn)
|
self.__handle_connection(conn)
|
||||||
|
|
||||||
@ -82,7 +91,10 @@ class Daemon(object):
|
|||||||
self.__watcher.remove_folder(folder.path)
|
self.__watcher.remove_folder(folder.path)
|
||||||
|
|
||||||
def terminate(self):
|
def terminate(self):
|
||||||
self.__listener.close()
|
self.__stopped.set()
|
||||||
|
with Client(self.__listener.address, authkey = self.__listener._authkey) as c:
|
||||||
|
c.send(None)
|
||||||
|
|
||||||
if self.__scanner is not None:
|
if self.__scanner is not None:
|
||||||
self.__scanner.stop()
|
self.__scanner.stop()
|
||||||
self.__scanner.join()
|
self.__scanner.join()
|
||||||
|
Loading…
Reference in New Issue
Block a user