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
|
||||
from serial import Serial
|
||||
from multiprocessing import Pipe, Process
|
||||
from multiprocessing import Pipe
|
||||
|
||||
from mopidy.mixers import BaseMixer
|
||||
from mopidy.process import BaseProcess
|
||||
from mopidy.settings import (MIXER_EXT_PORT, MIXER_EXT_SOURCE,
|
||||
MIXER_EXT_SPEAKERS_A, MIXER_EXT_SPEAKERS_B)
|
||||
|
||||
@ -55,7 +56,7 @@ class NadMixer(BaseMixer):
|
||||
self._pipe.send({'command': 'set_volume', 'volume': volume})
|
||||
|
||||
|
||||
class NadTalker(Process):
|
||||
class NadTalker(BaseProcess):
|
||||
"""
|
||||
Independent process which does the communication with the NAD device.
|
||||
|
||||
@ -78,10 +79,10 @@ class NadTalker(Process):
|
||||
_nad_volume = None
|
||||
|
||||
def __init__(self, pipe=None):
|
||||
Process.__init__(self)
|
||||
super(NadTalker, self).__init__()
|
||||
self.pipe = pipe
|
||||
|
||||
def run(self):
|
||||
def _run(self):
|
||||
self._open_connection()
|
||||
self._set_device_to_known_state()
|
||||
while self.pipe.poll(None):
|
||||
|
||||
@ -7,21 +7,29 @@ from mopidy.utils import get_class, unpickle_connection
|
||||
|
||||
logger = logging.getLogger('mopidy.process')
|
||||
|
||||
class CoreProcess(multiprocessing.Process):
|
||||
def __init__(self, core_queue):
|
||||
multiprocessing.Process.__init__(self)
|
||||
self.core_queue = core_queue
|
||||
|
||||
class BaseProcess(multiprocessing.Process):
|
||||
def run(self):
|
||||
try:
|
||||
self._setup()
|
||||
while True:
|
||||
message = self.core_queue.get()
|
||||
self._process_message(message)
|
||||
self._run()
|
||||
except KeyboardInterrupt:
|
||||
logger.info(u'Interrupted by user')
|
||||
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):
|
||||
self._backend = get_class(settings.BACKENDS[0])(
|
||||
core_queue=self.core_queue)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user