On Wednesday, 17 February 2021 13:32:19 GMT Terry Coles wrote:
> In any case, the Bells Pi code uses the same approach, so how come that
> works and the Music code doesn't?
I think I've sussed this. :-) At least I think I know what is going wrong.
In order to respond to commands coming in from the Webserver, I have a
function called check_webserver_commands(). This periodically checks for data
on the socket, parses it and calls the appropriate function; in this case
restartmp3() (which calls mp3_player_start() ). To service this function, I
added a line to apscheduler:
sched.add_job(check_webserver_commands, 'interval', seconds=1,
id='check_webserver_commands')
The problem with this is that when the calling function takes a long time to
return, I get an error (too many instances), so I added a line to the
beginning of check_webserver_commands():
sched.pause_job(job_id='check_webserver_commands') # Suspend until current
job is complete
and one at the end:
sched.resume_job(job_id='check_webserver_commands')# Restart checking for
commands
The problem is that the mp3_player_start() function doesn't return until the
line:
mp3_wait = mp3_player.wait()
has completed (and never if the loop is active), so the sched.resume job
never gets run.
I used apscheduler to ensure that the check_webserver_commands() function
would get called frequently, but without locking the program up during the
intervals between each check, but it would seem that it doesn't successfully
interrupt the mp3_player.wait() method.
I need that method to tell me when the loop is completed, so can anyone
suggest a better way to poll the check_webserver_commands() function or to
make the mp3_player.wait() method more interruptible?
Of course I may be wrong on my hypothesis, but when I put the sched.resume()
method just before the call to restartmp3() the rest of the commands from the
Webserver were recognised and serviced.
--
Terry Coles
--
Next meeting: Online, Jitsi, Tuesday, 2021-03-02 20:00
Check to whom you are replying
Meetings, mailing list, IRC, ... http://dorset.lug.org.uk
New thread, don't hijack: mailto:[email protected]