Probleme bei Python Skript

  • Hallo zusammen

    Ich habe mir ein python Skrypt zusammen geschrieben mit hilfe google,foren etc.

    Vorne weg, meine Programier Fähigkeiten sind nicht sehr gut darum wollte ich euch fragen könntet ihr das mal anschauen und mir eventuell sagen wo der Fehler ist?

    Es handelt sich um ein Motion detect für den Magic Mirror mithilfe dem HC-SR04. Das Skrypt läuft eigentlich auch aber irgendwo ist der Wurm drin und (es variert sehr 3-24h) es hängt sich auf. Der Prozessor vom Raspy geht hoch auf 100% prozent und das Skrypt macht nichts mehr.

    Ich habe im Skrypt noch eine Multimessung eingebaut weil ich viele ausreiser hatte bei der messung. Das alles funktioniert eigentlich sehr gut.

    Ich habe einen Raspberry pi 2. 16gb SD karte class 10. python 2.7.13

    Ich hoffe jemand kann mir helfen....

  • Es kann sein, dass er bei der Messung das Signal "verpasst". Das heißt du bleibst in der While True Schleife gefangen, welche ohne time.sleep die Prozessorlast in die Höhe treibst.

    Empfehlung, bau ein Timeout ein, dass er nach überschreiten dieser die Schleifen zur Zeitmessung verlässt.

  • würde gern das Optimieren.

    • Statt Python2 besser Python3 verwenden
    • os.system ist veraltet und soll nicht mehr verwendet werden (steht sogar in der Dokumentation)
    • Warum schaltest du überhaupt die Pins so umständlich mit os.system, hierfür ist ja genau RPi.GPIO gemacht...
    • ...apropo, statt RPi.GPIO zur Steuerung der GPIOs würde ich dir gpiozero empfehlen
    • KONSTANTEN auf globaler Ebene sind groß zu schreiben (Auf Globaler Ebene sollen sich nur Imports; Klassen; Funktionen und Konstanten befinden + if __main == "__main__" Block)
    • Strings mittels .format zusammensetzen

    Funktioniert Zeile 58 überhaupt? Wo wird das File geöffnet? Und dann ist es besser dies mit dem with Statement zu öffnen, dann kümmert sich auch Python selbst darum es wieder zu schießen.

  • Hallo,

    Zitat

    Nur habe ich cirka 10h in das scrypt investiert und würde gern das Optimieren.

    Na ja, das ist ziemlich "Kraut und Rüben" - ein Re-Write wäre schon nicht verkehrt. Dann direkt in Python 3, weil Python 2, was du nutzt, in etwas mehr als einem Jahr ohne Support ist.

    Zum Code:

    • PEP8 beachten! Dein wilder Mix aus englischen und deutschen Variablen- und Funktionsnamen ist fruchtbar. `startShit` als Funktionsname ist einfach nur... shit, right from the start. Ungewollt lustig ist der Funktionsname `mess`. Ist ja das englische Wort für "Durcheinander", "Unordnung". Variablen- und Funktionsnamen werden klein_mit_unter_strich und nicht camelCase oder PascalCase geschrieben.
    • Warum benutzt du mal `os.system(gpio ....)` und mal `Rpi.GPIO`?
    • Strings baut man auch in Python 2.7 mit der format-Methode von Strings zusammen, nicht mit `+`.
    • `os.system()` ist veraltet, das steht auch wörtlich in der Python Doku. Du möchtest das `subprocess` Modul nutzen.
    • Wenn du Debugging brauchst, dann nutz' das logging-Modul von Python, dann brauchst du das nicht selber implementieren. Zumal das logging-Modul eine deutlich bessere Implementierung hat als das, was du im Code hast.
    • `return` ist ein Statement, keine Funktion -> keine Klammer notwendig.
    • Die Funktion `close` bekommt zwei Werte übergeben, nutzt diese aber nicht.
    • Die Zeilen 106 ist schlecht, damit überschreibst du die Build-In Funktion namens `sum`. Was zu "lustigen" Nebeneffekten und schwer auffindbaren Fehler führen kann.
    • Gleiches gilt für Zeile 96 und `list` - das ist auch eine Build-In Funktion.
    • Die Zeilen 105 - 110 kannst du einfacher und kürzer als `return sum(my_list)/len(my_list)` schreiben.

    Mal so grundsätzlich: Programmieren ist nicht raten und programmieren ist erst recht nicht Copy&Paste. Klar kann man sich von anderem Code "inspirieren" lassen - dann sollte man aber zumindest halbwegs verstehen, was da abläuft. Von daher: nimm' dir die Zeit und arbeite das offizielle Python-Tutorial auf docs.python.org durch. Dann sollten die Grundlagen sitzen und auch der Stil halbwegs passen.

    Gruß, noisefloor

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!