Mit Join wird alles besser...

  • Hallo The Ibis,


    leider ist die Thread - Unterstützung in Micropython wesentlich schwächer als im normalen Python. Du könntest eine eigene Thread - Klasse von _thread ableiten und die Verwaltung der Liste innerhalb deiner Klasse vornehmen. Dann könnte eine join() - Methode problemlos implementiert werden. Das Prinzip bleibt aber das gleiche, es ist dann nur etwas 'schöner' formuliert.


    Gruss

    René

  • Hallo,

    sehr gutes Video zum Thema Threads.

    Insbesondere der Teil mit den Semaphoren und Locks.

    Aber, was da noch fehlte, und leider noch nicht in der Klasse implementiert ist, ist eine JOIN Funktion.

    Hier mein Workaround:



    Nach dem Start der Threads wartet die JOIN Funktion, bis alle Threads beendet sind.

    Ist nur ein primitives polling, aber sollte für den Hobbybereich ausreichen.

    Und so sieht das Ergebnis aus:


    Code
    1. MicroPython v1.16 on 2021-06-23; ESP32 module with ESP32
    2. Type "help()" for more information.
    3. >>> %Run -c $EDITOR_CONTENT
    4. Hello from thread One
    5. Hello from thread Two
    6. One done
    7. Two done
    8. All threads done
    9. >>>


    Die JOIN Funktion ist besonders geeignet, wenn man Aufgaben parallelisieren möchte. Z.B. von N Dateien den Hash berechnen.

    Dann könnte man (soweit sinnvoll für den Prozessor) für jede Datei einen Thread eröffnen. Der Prozessor ist dann voll ausgelastet, wenn man's richtig macht.

    Das starten der Threads könnte auch intelligent auf eine sinnvolle Anzahl begrenzt werden, und neue Threads werden gestartet sobald diese Zahl unterschritten wird.

    Aber sobald alle Threads gestartet sind kann man JOIN aufrufen und abwarten bis das Hauptprogramm weiterlaufen kann.


    Also auch im Experimentalzustand der _thread Library kann man schon spannende Sachen machen.


    Viel Spass beim Experimentieren

    The Ibis