Radiowecker nach Monaten: OSError: [Errno 12] Cannot allocate memory

  • Hallo,

    ich habe seit einigen Monaten einen Radiowecker auf Basis des PI in Betrieb, dessen Python-Script alle paar Monate abstürzt. Nun habe ich das erste mal auch die Fehlermeldung des Scripts:

    Ich nutze MPD/MPC als Player und prüfe mittels isStreamingActive(self) zyklisch mehrmals pro Sekunde, ob der Player aktiv ist und das Streaming läuft. Der relevante Code-Teil sieht so aus:

    Der Fehler trat also beim zyklischen Aufruf von MPC als Subprocess auf. Konkret prüfe ich hier, ob die Ausgabe von MPC den String '[playing]' enthält.


    Nach einigem Googeln habe ich nichts Konkretes gefunden, außer, dass wohl bei jedem popen-Aufruf etwas Speicher für irgendwas reserviert und evtl. nicht mehr freigegeben wird. Wirklich verstanden habe ich das aber nicht. Habe ich an der Stelle irgendwas unsauber umgesetzt? Geht das eleganter?

    Muss ich das Objekt p irgendwie löschen/entsorgen, die PIPE irgendwie schließen?

    Komme ich vielleicht eleganter an den aktuellen Status von MPD? Blöd finde ich hier nämlich auch, dass ich dieses p.wait() in meiner Hauptschleife drin habe. Aber ne bessere Möglichkeit kenne ich nicht.


    Michael