diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 07f571ce..84b1d6a5 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -1,5 +1,6 @@ import asyncore import logging +from multiprocessing import Queue import os import sys @@ -7,6 +8,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../'))) from mopidy import get_class, settings, SettingsError +from mopidy.core import CoreProcess from mopidy.mpd.server import MpdServer logger = logging.getLogger('mopidy') @@ -17,13 +19,22 @@ def main(): # multiprocessing branch plan # --------------------------- # - # TODO Init backend in new Process (named core?) # TODO Init MpdHandler from backend/core # TODO Init MpdServer in MainThread or in new Process? - backend = get_class(settings.BACKENDS[0])() - MpdServer(backend=backend) - asyncore.loop() + main_queue = Queue() + core_queue = Queue() + server_queue = Queue() + core = CoreProcess(core_queue=core_queue, + main_queue=main_queue, server_queue=server_queue) + core.start() + while True: + message = main_queue.get() + if message['command'] == 'core_ready': + MpdServer(backend=None) + asyncore.loop() + else: + logger.warning(u'Cannot handle message: %s', message) def _setup_logging(verbosity_level): if verbosity_level == 0: diff --git a/mopidy/core.py b/mopidy/core.py new file mode 100644 index 00000000..bd48c818 --- /dev/null +++ b/mopidy/core.py @@ -0,0 +1,23 @@ +import logging +from multiprocessing import Process, Queue + +from mopidy import get_class, settings + +logger = logging.getLogger('mopidy.core') + +class CoreProcess(Process): + def __init__(self, core_queue=None, main_queue=None, server_queue=None): + Process.__init__(self) + self.queue = core_queue + self.main_queue = main_queue + self.server_queue = server_queue + + def run(self): + self._setup() + while True: + message = self.queue.get() + # TODO Do something with the message + + def _setup(self): + self.backend = get_class(settings.BACKENDS[0])() + self.main_queue.put({'command': 'core_ready'})