From b21a3e73fcead32e2a87f24cbf8beb72a3b8d1e3 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sat, 20 Mar 2010 12:39:56 +0100 Subject: [PATCH] Add BaseProcess which does common error handling for all subprocesses --- mopidy/mixers/nad.py | 9 +++++---- mopidy/process.py | 26 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/mopidy/mixers/nad.py b/mopidy/mixers/nad.py index 51592f30..7dd0b387 100644 --- a/mopidy/mixers/nad.py +++ b/mopidy/mixers/nad.py @@ -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): diff --git a/mopidy/process.py b/mopidy/process.py index 144cc4b9..2b05eefc 100644 --- a/mopidy/process.py +++ b/mopidy/process.py @@ -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)