Beiträge von alpha

    habe fertig :smiling_face:

    wer's mal ausprobieren will: feel free!

    noch ein hinweis vorweg: beim ersten scannen der media files werden thumbnail files von bildern generiert, nach exif daten gedrehte bilder erzeugt und meta files ("<file>.media") angelegt. das dauert bei vielen bildern (ich habe so 15000) schon ne weile. dafuer geht's dann danach schnell.

    bei mir laeuft's problemlos, was nicht heisst, dass es in anderen setups nicht crasht...

    viel spass!


    p.s. wer weiterentwickeln will: welcome!

    so sieht jetzt mein workaround fuer das nicht (immer) funktionierende kill aus:


    Was machst du denn, wenn das Audio File zu Ende ist und du ein neues startest, benutzt den den gleichen self.audio_container?

    MacDisein, die frage ist nicht schlecht und hat mich angeregt, mal auszuprobieren, was passiert, wenn ich jedes mal einen neuen eConsoleContainer instanziiere... und siehe da, es funktioniert. (in meiner console implementierung wird naemlich auch jedes mal ein neuer subprozess erzeugt).

    ein memory leak sollte ja dadurch nicht entstehen, da die freigegebenen instanzen von der garbage collection wieder entsorgt werden muessten.

    das verstehe ich doch... aber ist denn sicher, dass sich der prozess mit sendctrlc sicher beendet und appclosed aufgerufen wird? wenn das kill schon nicht funktioniert, warum dann sendctrlc?

    was waere sauber?

    - sendctrlc

    - warten auf beenden... wie lange? also brauche ich einen timer

    - falls sich der prozess nicht in der zeit von selbst beendet, dann kill()

    - und wenn das nicht hilft, noch ein killall -9 hinterher?


    sendctrlc ist sicher sinnvoll, wenn der prozess noch irgendwelche dinge abschliessen muss... gecachte daten auf die platte oder so.

    aber in diesem fall geht es doch nur darum, den prozess zu killen.

    besser wäre in der tat container.sendCtrlC()

    ja, aber am ende zaehlt doch das resultat... und killall -9 ... funktioniert doch immer todsicher :winking_face:

    ich hatte mal problehalber das container.kill gegen ein os.system("killall -9 gst-bla") ersetzt... und damit gings.

    gerne, ich mache folgendes:

    in meiner diashow mit bildern, videos und hintergrundmusik starte ich damit die hintergrundmusik und die videos:

    Code
            url = "'file://%s'" % filename
            cmd = 'gst-launch-1.0 playbin -v uri=' + url
            if self.song_list:
                cmd += ' flags=0x51'
            self.video_container.execute(cmd)
    Code
            url = "'file://%s'" % filename
            cmd = "gst-launch-1.0 playbin uri=" + url + " audio-sink='alsasink'"
            self.audio_container.execute(cmd)

    und bei einem abbruch kille ich die container mit self.xxxxx_container.kill()


    solange ich das audio file nur einmal gestartet habe, funktioniert das auch. aber sobald ein audio file abgelaufen ist und ich das zweite starte, dann die diashow abbreche und den tv-service starte, habe ich gemischten ton vom zweiten audio file und tv-service. das kill scheint dann nicht zu funktionieren.

    danke Sven H ... hmm, da gibt's ja noch ne menge anderer funktionen, die nicht in der class reference sind. scheint so, als wuerden in der class reference nur die in python implementierten funktionen aufgelistet.


    anyway, habe mal einen eigenen einfachen ConsoleAppContainer implementiert... und der funktioinert so, wie ich mir das vorgestellt hatte...

    irgendwie scheint sich der eConsoleAppContainer nicht so zu verhalten, wie ich das erwarten wuerde :smiling_face:

    habe hier gelesen, dass man zum abbrechen eines mit container.execute(<cmd>) gestarteten prozesses container.kill() nehmen soll.

    das scheint auch auf den ersten blick zu funktionieren, aber

    - in der class reference von eConsoleAppContainer gibt es nur init und execute... kein kill???

    - wenn ich container.execute(), container.kill(), container.execute(), etc. mehrfach hintereinander aufrufe, dann bleiben zum einen zombie prozesse und zum anderen scheinen auch prozesse zu ueberleben.

    wenn ich statt container.kill() ein os.system("killall -9 <cmd>) verwende, dann funktioniert's.

    wie verwende ich eConsoleAppContainer richtig?

    danke.

    naja, zuerst muss man mal die basisversion fixen, bevor man varianten davon auf den markt bringt.

    und die neue box ist ja, wie oben schon geschrieben, eher ne one se als ne two.