Add BaseProcess which does common error handling for all subprocesses
This commit is contained in:
parent
7a5850d3b1
commit
b21a3e73fc
@ -1,8 +1,9 @@
|
|||||||
import logging
|
import logging
|
||||||
from serial import Serial
|
from serial import Serial
|
||||||
from multiprocessing import Pipe, Process
|
from multiprocessing import Pipe
|
||||||
|
|
||||||
from mopidy.mixers import BaseMixer
|
from mopidy.mixers import BaseMixer
|
||||||
|
from mopidy.process import BaseProcess
|
||||||
from mopidy.settings import (MIXER_EXT_PORT, MIXER_EXT_SOURCE,
|
from mopidy.settings import (MIXER_EXT_PORT, MIXER_EXT_SOURCE,
|
||||||
MIXER_EXT_SPEAKERS_A, MIXER_EXT_SPEAKERS_B)
|
MIXER_EXT_SPEAKERS_A, MIXER_EXT_SPEAKERS_B)
|
||||||
|
|
||||||
@ -55,7 +56,7 @@ class NadMixer(BaseMixer):
|
|||||||
self._pipe.send({'command': 'set_volume', 'volume': volume})
|
self._pipe.send({'command': 'set_volume', 'volume': volume})
|
||||||
|
|
||||||
|
|
||||||
class NadTalker(Process):
|
class NadTalker(BaseProcess):
|
||||||
"""
|
"""
|
||||||
Independent process which does the communication with the NAD device.
|
Independent process which does the communication with the NAD device.
|
||||||
|
|
||||||
@ -78,10 +79,10 @@ class NadTalker(Process):
|
|||||||
_nad_volume = None
|
_nad_volume = None
|
||||||
|
|
||||||
def __init__(self, pipe=None):
|
def __init__(self, pipe=None):
|
||||||
Process.__init__(self)
|
super(NadTalker, self).__init__()
|
||||||
self.pipe = pipe
|
self.pipe = pipe
|
||||||
|
|
||||||
def run(self):
|
def _run(self):
|
||||||
self._open_connection()
|
self._open_connection()
|
||||||
self._set_device_to_known_state()
|
self._set_device_to_known_state()
|
||||||
while self.pipe.poll(None):
|
while self.pipe.poll(None):
|
||||||
|
|||||||
@ -7,21 +7,29 @@ from mopidy.utils import get_class, unpickle_connection
|
|||||||
|
|
||||||
logger = logging.getLogger('mopidy.process')
|
logger = logging.getLogger('mopidy.process')
|
||||||
|
|
||||||
class CoreProcess(multiprocessing.Process):
|
class BaseProcess(multiprocessing.Process):
|
||||||
def __init__(self, core_queue):
|
|
||||||
multiprocessing.Process.__init__(self)
|
|
||||||
self.core_queue = core_queue
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
try:
|
try:
|
||||||
self._setup()
|
self._run()
|
||||||
while True:
|
|
||||||
message = self.core_queue.get()
|
|
||||||
self._process_message(message)
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
logger.info(u'Interrupted by user')
|
logger.info(u'Interrupted by user')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
def _run(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
class CoreProcess(BaseProcess):
|
||||||
|
def __init__(self, core_queue):
|
||||||
|
super(CoreProcess, self).__init__()
|
||||||
|
self.core_queue = core_queue
|
||||||
|
|
||||||
|
def _run(self):
|
||||||
|
self._setup()
|
||||||
|
while True:
|
||||||
|
message = self.core_queue.get()
|
||||||
|
self._process_message(message)
|
||||||
|
|
||||||
def _setup(self):
|
def _setup(self):
|
||||||
self._backend = get_class(settings.BACKENDS[0])(
|
self._backend = get_class(settings.BACKENDS[0])(
|
||||||
core_queue=self.core_queue)
|
core_queue=self.core_queue)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user