Weil uns das Thema ebenfalls hin und wieder umtreibt, gibt es hierzu eine kleine historische Rückschau und entsprechende Einordnungen.
Das klassische _thread
Modul von MicroPython ist leider in unterschiedlichen Forks unterschiedlich gut ausgebaut.
Ja, davon gehe ich aus. Das MicroPython, von dem Pycom abzweigte, war damals hier noch recht unausgebaut.
Ausgehend von GitHub - micropython/micropython-esp32: Old port of MicroPython to the ESP32 -- new port is at https://github.com/micropython/micropython hatte Daniel Campora damals sowohl am threading als auch an der ble Unterstützung für MicroPython auf ESP32 gearbeitet.
Ohne es jetzt genauer zu wissen: Ich vermute dass aktuell das komplette Threading Subsystem direkt von Vanilla/Genuine MicroPython kommt. Umso mehr schade, dass Pycom auch dort so hinterherhinkt – vermutlich gerade deswegen, weil an dieser Stelle eigene Aspekte rund um super top halves im Bereich des Interrupt-Handlings realisiert wurden [1].
Vielleicht aber auch einfach nur, weil zu wenige Ressourcen oder Know-How dafür übrig sind, näher am Mainline von Vanilla/Genuine MicroPython zu bleiben und den eigenen Entwicklungsstand jeweils darauf zu portieren. Oh Fragmentation! [2]
Gerade noch recht frisch und interessant …
- [ESP32] utime.sleep_ms does not free GIL on small intervals · Issue #5344 · micropython/micropython · GitHub
- utime.sleep_ms does nothing useful when called with 0 milliseconds. · Issue #5345 · micropython/micropython · GitHub
… plus entsprechende Fixes von Josh Lloyd.