adding thread for processing large playlists
This commit is contained in:
17
skill/app.py
17
skill/app.py
@@ -3,6 +3,9 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
from multiprocessing import Process, Manager
|
||||||
|
from multiprocessing.managers import BaseManager
|
||||||
|
|
||||||
|
|
||||||
from ask_sdk_core.skill_builder import SkillBuilder
|
from ask_sdk_core.skill_builder import SkillBuilder
|
||||||
from ask_sdk_core.dispatch_components import AbstractRequestHandler, AbstractRequestInterceptor, AbstractResponseInterceptor
|
from ask_sdk_core.dispatch_components import AbstractRequestHandler, AbstractRequestInterceptor, AbstractResponseInterceptor
|
||||||
@@ -173,7 +176,10 @@ if 'NAVI_DEBUG' in os.environ:
|
|||||||
logger.warning('Log level set to WARNING')
|
logger.warning('Log level set to WARNING')
|
||||||
|
|
||||||
# Create a queue
|
# Create a queue
|
||||||
play_queue = queue.MediaQueue()
|
BaseManager.register('MediaQueue', queue.MediaQueue)
|
||||||
|
manager = BaseManager()
|
||||||
|
manager.start()
|
||||||
|
play_queue = manager.MediaQueue()
|
||||||
logger.debug('MediaQueue object created...')
|
logger.debug('MediaQueue object created...')
|
||||||
|
|
||||||
# Connect to Navidrome
|
# Connect to Navidrome
|
||||||
@@ -483,8 +489,9 @@ class NaviSonicPlayPlaylist(AbstractRequestHandler):
|
|||||||
else:
|
else:
|
||||||
song_id_list = connection.build_song_list_from_playlist(playlist_id)
|
song_id_list = connection.build_song_list_from_playlist(playlist_id)
|
||||||
play_queue.clear()
|
play_queue.clear()
|
||||||
controller.enqueue_songs(connection, play_queue, song_id_list)
|
controller.enqueue_songs(connection, play_queue, [song_id_list[0]])
|
||||||
|
process = Process(target=queueWorkerThread, args=(connection, play_queue, song_id_list[1:]))
|
||||||
|
process.start()
|
||||||
speech = 'Playing playlist ' + str(playlist.value)
|
speech = 'Playing playlist ' + str(playlist.value)
|
||||||
logger.info(speech)
|
logger.info(speech)
|
||||||
card = {'title': 'AskNavidrome',
|
card = {'title': 'AskNavidrome',
|
||||||
@@ -494,6 +501,10 @@ class NaviSonicPlayPlaylist(AbstractRequestHandler):
|
|||||||
|
|
||||||
return controller.start_playback('play', speech, card, track_details, handler_input)
|
return controller.start_playback('play', speech, card, track_details, handler_input)
|
||||||
|
|
||||||
|
def queueWorkerThread(connection, play_queue, song_id_list):
|
||||||
|
logger.debug('In playlist processing thread!')
|
||||||
|
controller.enqueue_songs(connection, play_queue, song_id_list)
|
||||||
|
logger.debug('Finished playlist processing!')
|
||||||
|
|
||||||
class NaviSonicPlayMusicByGenre(AbstractRequestHandler):
|
class NaviSonicPlayMusicByGenre(AbstractRequestHandler):
|
||||||
""" Play songs from the given genere
|
""" Play songs from the given genere
|
||||||
|
|||||||
Reference in New Issue
Block a user