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

View File

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