chumicro-runner¶
Tick-based scheduling for CircuitPython, MicroPython, and CPython, debuggable from print().
Your main loop is the two calls below: runner.tick() runs every registered service once on a shared timestamp, then runner.wait() idles the CPU until the next deadline or socket event. Each service is one object with check(now_ms) and handle(now_ms), so every state change happens in the order you wrote and a print() shows it. Every networked library in ChuMicro (chumicro-wifi, chumicro-sockets, chumicro-mqtt, chumicro-requests, chumicro-http-server, chumicro-websockets) is shaped to register here, so your LED keeps blinking through a TLS handshake, a slow HTTP response, or a stalled MQTT peer: each of them gets the same share of every tick.
Install¶
# CircuitPython (after `circup bundle-add ChuMicro/ChuMicro-Bundle`)
circup install chumicro_runner
# MicroPython
mpremote mip install github:ChuMicro/ChuMicro-Bundle/chumicro_runner
# CPython
pip install chumicro-runner
No board running yet? Start here goes from a new board to your own code running on it. Installing libraries covers registering the bundle, the experimental channel, and the pre-compiled .mpy packages.
Quick example¶
from chumicro_runner import Runner
runner = Runner()
runner.add_periodic(lambda now_ms: print("one second"), period_ms=1000)
runner.add_periodic(lambda now_ms: print("five seconds"), period_ms=5000)
while True:
now_ms = runner.tick()
runner.wait(now_ms)
Documentation¶
- User Guide: the check / handle service contract, registration patterns, generator-driven flows, idling between ticks, period-gated and batch-fired services
- API Reference:
Runnerwith itsadd/add_periodic/add_generatorregistrations,TaskHandle, and thesleep_untilsuspension helper - Testing Helpers: using
CallRecorder,FakePoller, andvalidate_servicein your tests