adding thread for processing large playlists

This commit is contained in:
trekkie1707
2025-08-19 01:49:08 -04:00
parent 70120d23cf
commit acacc3622d

View File

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