Catch Ctrl+C nicely in CoreProcess to avoid stacktrace

This commit is contained in:
Stein Magnus Jodal 2010-03-20 12:21:47 +01:00
parent 55cc5b681d
commit 0504be1cf0

View File

@ -1,5 +1,6 @@
import logging
import multiprocessing
import sys
from mopidy import settings
from mopidy.utils import get_class, unpickle_connection
@ -12,15 +13,26 @@ class CoreProcess(multiprocessing.Process):
self.core_queue = core_queue
def run(self):
backend = get_class(settings.BACKENDS[0])(core_queue=self.core_queue)
frontend = get_class(settings.FRONTEND)(backend=backend)
while True:
message = self.core_queue.get()
if message['command'] == 'mpd_request':
response = frontend.handle_request(message['request'])
connection = unpickle_connection(message['reply_to'])
connection.send(response)
elif message['command'] == 'end_of_track':
backend.playback.end_of_track_callback()
else:
logger.warning(u'Cannot handle message: %s', message)
try:
self._setup()
while True:
message = self.core_queue.get()
self._process_message(message)
except KeyboardInterrupt:
logger.info(u'Interrupted by user')
sys.exit(0)
def _setup(self):
self._backend = get_class(settings.BACKENDS[0])(
core_queue=self.core_queue)
self._frontend = get_class(settings.FRONTEND)(backend=self._backend)
def _process_message(self, message):
if message['command'] == 'mpd_request':
response = self._frontend.handle_request(message['request'])
connection = unpickle_connection(message['reply_to'])
connection.send(response)
elif message['command'] == 'end_of_track':
self._backend.playback.end_of_track_callback()
else:
logger.warning(u'Cannot handle message: %s', message)