Catch Ctrl+C nicely in CoreProcess to avoid stacktrace
This commit is contained in:
parent
55cc5b681d
commit
0504be1cf0
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user