Posts by noisefloor

    Hallo,


    es fehlt ein Python-Modul, dass scheinbar / offensichtlich nicht installiert ist. Die ganze Installationsanleitung ist auch ein bisschen diffus - ich sehe auch nicht, wo dieses Modul installiert wird bzw. die ob es mit dem git-Repo geclont wird.


    Das Projekt verwendet Python 2 - das ist seit 1.1.2020 ohne Support. Im Jahr 2022 nicht der Weisheit letzter Schluss.


    Und bitte Fehlermeldungen in Zukunft per Copy & Paste in einen Codeblock setzen und posten, keine unscharfen Bildschirmfotos.


    Gruß, noisefloor

    Hallo,


    Micropython hat die Möglichkeit, CPU Opcode statt Bytecode zu generieren, siehe https://docs.micropython.org/e…l#the-native-code-emitter. Was das bringt - keine Ahnung.


    Bzgl. Speicher: lt. Internet kannst du ca. 185 kB für dein Programm nutzen, der Rest ist für Python belegt. Es gibt ja auch andere Boards mit dem RP2040 Controller, die mehr Speicher haben, z.B. Black Adafruit Feather RP2040. Dann hast du - lt. Info auf der Webseite - ~7 MB Speicher zur Verfügung.


    Gruß, noisefloor

    Hallo,


    Quote

    Bzw einfach ne USB buchse dran löten oder ist das (was ich denke) viel komplizierter?

    Nein, deine Denkweise ist eher zu simple. Die Anschlüsse / die Pins sind ja nicht aus Spaß an der Freude am Compute-Modul, die haben schon eine Funktion. Ob du die alle brauchst musst du entscheiden, basierend auf dem, was du machst / vor hast. Über die Pins wird das Compute-Modul auch mit Strom versorgt. Das CM3 braucht z.B. immer an sechs Pins Strom. Details: siehe von Gnom verlinkte Doku.


    Quote

    ich hatte gehofft platz zu sparen

    Dann nimm' doch einen Raspi Zero 2W. Hat mehr Rechenpower als damals der A+ und ist kleiner.


    Grundsätzlich ist der Raspi ja auch immer noch als Bastelcomputer ausgelegt, d.h. er ist _nicht_ auf die kleinstmögliche Größe optimiert.


    Gruß, noisefloor

    Hallo,


    ein Adapterboard kaufen und los, z.B. https://www.rasppishop.de/CM4-IO-Board oder https://turingpi.com/. Es gibt auch noch andere Adapterboards, für Raspi-Cluster.


    Ich weiß ja nicht, was du dir vorstellst - aber welche Möglichkeiten außer Adapterboard oder selber was basierend auf auf der Kontaktleiste bauen soll es denn sonst noch geben?


    Die primäre Anwendung für die CM ist IMHO, wenn man sich möglichst preiswert mit Clustern / verteiltem Rechnen in Clustern beschäftigen möchte oder muss, ohne massive in Hardware zu investieren zu müssen.


    Gruß, noisefloor

    Hallo,

    Quote

    Ursprünglich dachte ich das man die Werkseitige Python Version so auf die aktuellste "Upgraden kann" aber da habe ich mich wohl geirrt

    Nein. Debian und alles, was darauf aufsetzt - also auch Raspbain - fährt kein Rolling-Release Modell. Die Hauptversion eines Programms ändert sich für einen Release nicht.

    Quote

    Wie meisnt du das? beim flashen der SD Karte?

    Nein, schon bei der manuelle Installation. Wenn ich mal Python manuell installieren muss, dann folge ich der Anleitung: https://wiki.ubuntuusers.de/Python/manuelle_Installation/. Sollte auch 1:1 auf Raspbian übertragbar sein.


    Gruß, noisefloor

    Hallo,


    grundsätzlich ist es auch überhaupt keine gute Idee, dass systemseitige Python durch eine andere Version zu ersetzen. Dafür hängt bei den meisten Linux-Distro zu viel an Python dran. Z.B. diverse Module, die systemseitig zusätzlich installiert werden, aber beim manuell installierten dann fehlen.

    Und wenn man das doch ganz dringend will, kann man das direkt bei der Installation erledigen lassen.


    Wenn du ein anderes als das systemseitige Python brauchst, dann gib' doch einfach die Version explizit beim Aufruf mit an.


    Und mal so rein Interesse halbe: welche spezielle Funktionalität aus Python 3.10, die Python 3.9 nicht hat, brauchst du?


    Gruß, noisefloor

    Hallo,

    Kann man das nicht abfangen?

    Klar kann man das. Es ging ja in den letzten 10 Posts darum, dass die Vermutung nahe liegt, dass der TE an der Programmiersprache seiner Wahl (=Python) vorbei programmiert und keine saubere Struktur von Fehlerbehandlung und Datenvalidierung hat. Was aber, so habe ich inzwischen den Eindruck, sekundär ist, weil ein nicht ruckelnder Videostream aus einem Python-Thread heraus wichtiger ist *SCNR*


    Gruß, noisefloor

    Hallo,


    Quote

    Ich glaube da muss ich etwas mehr zur Anwendung sagen.

    Nee. Anstatt zum x-ten deine Code wortreich zu beschreiben solltest du ihn einfach zeigen, oder Teile daraus. Außerdem bist du permanent dabei, deinen uns unbekannten Code zu rechtfertigen. Kannst du, ist uns im Prinzip egal - DU kommst ja so nicht weiter. Bzw. wenn du so vorgehst kannst du das Fragen nach Hilfe eigentlich auch direkt sein lassen.


    Basierend auf deiner wortreichen Beschreibung klingt es eher so, als hättest du ein ziemlich falsches Konzept, was Fehlerbehandlung und Umgang mit falschen Messwerten angeht.


    Gruß, noisefloor

    Hallo,

    Quote

    ich dachte bisher das Python im Grunde in C geschrieben ist und daher immer auf C baut...

    Ist es ja auch. Aber ist ist halt eine eigene Programmiersprache.


    IronPython und Jython haben keinen GIL - in wie fern diese Projekt aber noch Leben / relevant sind -> keine Ahnung.


    Eine Sprache, die Nebenläufigkeit sehr einfach eingebaut hat, ist Go - was aber _nicht_ heißt, dass das, was du vorhast, mit Go in irgendeiner Form einfacher ist.


    Grundsätzlich geht das auch alles mit Python und grundsätzlich ist nebenläufige Programmierung nicht trivial, wenn man ein paar mehr Prozesse / Threads braucht.

    Außerdem kommt beim I/O-basierten Sachen ja auch dazu, dass das das Lesen und Senden der Daten Zeit braucht, d.h. der limitierende Faktor ist (auch die Hardware). Der Raspi ist ja sowieso keine Leistingsrakate, aber er ist sicherlich auch nicht dafür bekannt, ultraschnelle Schnittstellen zu haben.

    Plus dein Programm teilt sich die Resourcen mit allen Prozessen, die sonst noch auf dem Pi laufen - je weniger das ist, desto besser.


    Die könntest auch einfach mal deinen Programmcode zeigen - vielleicht sind da auch Teile drin, die einfach nur CPU-Zeit verbrennen.


    Gruß, noisefloor

    Hallo,


    ja, die Datei ist auch vorhanden - aber eben nicht das pip-Modul, das geladen und genutzt werden soll.


    Ich habe zwar auch schon Python-Version manuell kompiliert, aber ohne die anschließenden Änderungen / Verbiegungen am System, die du vorgenommen hast. Von daher kann ich dir nicht sagen, was da so schief laufen kann.


    Die Eingabe der Fehlermeldung, die ich in meinem vorherigen Post gepostet habe, in einer Suchmaschine deiner Wahl könnte aber ggf. weitere sachdienliche Hinweis liefern.


    Gruß, noisefloor

    Hallo,


    ich würde mal die Behauptung in den Raum stellen, dass die Zeile

    Code
    Error: Command '['/home/pi/OctoPrint/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.

    sagt, dass pip im venv eben nicht installiert wurde. Warum auch immer.


    Gruß, noisefloor

    Hallo,


    welcher Prozess wann dran ist entscheidet auch der Scheduler des Kernels. Aber darauf kann man ja Einfluss nehmen, siehe oben. Plus das du Prozesse einem der vier physischen Kerne zuweisen kannst.

    Echte Nebenläufigkeit geht grundsätzlich auch mit Threads - nur halt nicht bei CPython, wegen des o.g. GIL. Andere Programmiersprachen und auch anderen Python-Implementierungen können das.


    Quote

    Hättest du denn noch eine idee wie man das ganze am vernünftigsten / stabilsten usw. Angeht?

    In dem man fehlerfrei programmiert und das alles ausgiebig testet?


    Gruß, noisefloor

    Hallo,


    Quote

    Als aller erstes habe ich mal python aktualisiert, octoprint unterstützt wohl 3.7.

    Wie denn? Und welches Betriebssystem benutzt du.


    Grundsätzlich kann man mehrere Python-Version konfliktfrei nebeneinander installieren. Das Default-Python würde ich _nicht_ ändern, dass bei den meisten Linux-Distro Teil des Kernsystems Python benötigten, d.h. ein Wechsel der Version kann zu ungewünschten Seiteneffekten führen.


    Du musst parallel installierte Pythons halt explizit aufrufen. Wenn dein System-Python 3.5 ist, dass ruft `python3`genau das auf. Wenn du z.B. Python 3.7 parallel installierst, dann muss du `python3.7` aufrufen. Für `pip` sollte dann auch ein `pip3.7` existieren bzw. du kannst das auch so machen: `python3.7 -m pip ...`.

    Und für sowas ist es IMHO in der Tat SEHR empfehlenswert, dass ganze in einem Python Virtual Environment zu machen, um mögliche Seiteneffekte zu vermeiden. Als ein venv für Python 3.x anlegen und dann darin die Module via pip auf dem venv zu installieren.


    Gruß, noisefloor

    Hallo,

    Quote

    einen eigenen CPU kern zu reservieren oder diesen irgendwie anderweitig zu priorisieren?

    Nein. Bei Threads entscheidet der Scheduler des Kernels, wer wann wo dran ist. Und innerhalb von Threads in Python entscheidet Python, wann der Wechsel zwischen Threads passiert.


    Ist dir klar, dass Threads in Python _nicht_ parallel laufen, zumindest nicht in CPython? Das Stichwort ist GIL, was bedingt, dass Threads in CPython wechselweise nacheinander laufen. Echte Nebenläufigkeit würdest du auf Mehrkern-CPUs mit dem Multiprocessing Modul bekommen.

    Wenn du viel I/O hast und wenig Rechenzeit brauchst, dann kann ggf. auch asyncio ein Weg sein.


    Quote

    Ich könnte auch eine separate py Datei dafür anlegen und diese über os.system (oder subprocess) starten.

    Ist in 99% der Fälle falsch - innerhalb von Python importiert man andere Modul und nutzt dann deren Klassen / Methode. `os.system` ist veraltet, das steht auch wörtlich in der Python-Doku.


    Außerhalb von Python, also auf Betriebssystemeebene, kannst du Prozesse mit `nice` Priorisieren, mit `chrt` hast du erweitertn Zugriff auf Prioritäten, mit `taskset` kannst du ein Programm einem Kern zuordnen und mit `ionice` kannst du die I/O Priorität ändern.


    Und natürlich gilt auch: je leistungsschwächer dein Rechner ist und je mehr darauf gleichzeitig läuft, desto weniger Rechenzeit bekommt dein Programm, egal, was du einstellt.


    Gruß, noisefloor

    Hallo,


    Quote

    Scheiss Voraussetzung, ich weiß

    Genau, weil damit kommst du nie über den Status des Anfängers hinaus. Zum Lernen der Basics mögen Bücher (auf deutsch) reichen, aber spätestens, wenn du den nächsten Schritt gehst und weitere Module einbindest, musst du englisch lesen, weil die Doku von 99% der Module nun mal auf englisch ist. Selbst die Module der Standardbibliothek sind in den meisten Bücher ja nur zu 1/4 bis 1/3 abgedeckt.


    Du kannst ja einfach mal nachschauen, ob die drei genannten Module ast, shelve und json in deinen Bücher erklärt sind. ast mit 99,9% Sicherheit nichts, shelve mit 98,5% Sicherheit nicht, bei json hast du denke ich eine 50-50% Chance (nachdem du ein Buch verbrannt hast bleiben ja nur 2 Bücher :) ).


    Erschwerend kommt noch hinzu, dass fast kein deutschsprachige Python-Buch fehlerfrei ist, d.h. du hast eine gute Chance, dass du falsch lernst. Das genannten Python-Tutorial ist dagen fehlerfrei, das kommt direkt von den Python-Entwicklern.


    Gruß, noisefloor