Как исправить задержки / задержки в скрипте Python

#python

#python

Вопрос:

У меня есть мой скрипт на python, который выполняет mp3, когда текущее время совпадает со временем, указанным в текстовом файле. Однако все работает хорошо, но я замечаю задержку и задержку примерно на 18 секунд, прежде чем mplayer воспроизведет mp3-файл.

Есть ли способ улучшить мой скрипт на python, чтобы избавиться от задержки в 18 секунд и заставить mp3-файл воспроизводиться мгновенно?

Вот мой скрипт на python:

 #!/usr/bin/python
# -*- coding: utf-8 -*-

# import libraries

import json 
import urllib2 
from bs4 import BeautifulSoup 
import requests 
import datetime 
import playsound 
import os 
import subprocess

dateSTR = datetime.datetime.now().strftime('%H:%M')


f = open('/home/pi/test.txt','r') 
messagetest = f.read() 
newnametest = messagetest.replace("n","") 
f.close()


if (dateSTR) == (newnametest):


    os.system("mplayer -ao alsa:device=bluealsa /home/pi/test.mp3")
  

Комментарии:

1. Я не вижу никакого цикла в вашем коде, вы запускаете скрипт вручную?

Ответ №1:

Попробуйте запустить mplayer подпроцесс до того, как он вам действительно понадобится как:

 p = subprocess.Popen('mplayer -slave -idle -ao alsa:device=bluealsa', shell=True, stdin=subprocess.PIPE)
  

Это должно запуститься mplayer и ждать, когда вам это понадобится. Затем, когда вы хотите воспроизвести файл, выполните:

 p.communicate(input=b'loadfile /home/pi/test.mp3n')
  

Комментарии:

1. позвольте мне попробовать это

2. извините, это вообще не работает. Я пытался использовать ваш метод, но файл mp3 не воспроизводится вообще.

3. как вы думаете, мне нужно добавить ваш код в определенное место в моем скрипте python?

4. Вы должны добавить Popen как можно раньше в сценарий. Но как вы измеряете 18 секунд. Сама crontab система имеет значительные задержки.

5. да, я уже добавлял Popen в начале моего скрипта dateSTR = datetime.datetime.now().strftime('%H:%M') . И я остановил crontab, и nohup вместо этого я использовал, но забыл о 18-секундной задержке, когда mp3-файл вообще не воспроизводится

Ответ №2:

Я бы создал цикл, что-то вроде:

 from time import sleep
from datetime import datetime
...
done = []
while 1:
    dateSTR = datetime.now().strftime('%H:%M')
    if (dateSTR) == (newnametest) and not dateSTR in done:
        done.append(dateSTR)
        os.system("mplayer -ao alsa:device=bluealsa /home/pi/test.mp3")
    sleep(1)
  

Комментарии:

1. спасибо за ваш ответ, но не могли бы вы, пожалуйста, рассказать мне о цели цикла?

2. Я использую задание cron для выполнения скрипта

3. Проверьте, не запускает ли система другие cron в какой-то момент, что может вызывать задержку.

4. Мне было непонятно, как вы запускаете скрипт. Cronjob — правильный способ сделать это, но вы также можете использовать его в фоновом цикле, т. Е.: nohup python /path/to/my/script.py amp;

5. Можете ли вы показать нам содержимое /home/pi/test.txt ?