Add BaseProcess which does common error handling for all subprocesses

This commit is contained in:
Stein Magnus Jodal 2010-03-20 12:39:56 +01:00
parent 7a5850d3b1
commit b21a3e73fc
2 changed files with 22 additions and 13 deletions

View File

@ -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):

View File

@ -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)