
豆知識 MicroPythonは3.4なのにasync/awaitが使えるの🤔?謎解き
MicroPythonのsys.versionを見ると「3.4.0」と表示される。最初は、これがPythonのバージョンだと思っていた。しかし、試してみるとasync/awaitが使えていそう。Python 3.4にはasync defやawait構文はまだ存在していなかったはず。なぜMicroPythonでは使えるのか?その謎を調べてみた。
バージョンの確認方法
筆者のボードにインストールされたMicroPythonのバージョンを確認したみした。
起動時のログ
v1.27がMicroPythonとしてのバージョン
dirty は、公式リリースにローカルの変更を加えた状態でビルドされたことを表す
MicroPython v1.27.0-dirty on 2025-12-10; Generic ESP32S3 module with Octal-SPIRAM with ESP32S3sys.versionで確認
sys.versionで先頭に表示される「3.4.0」というのが、Pythonのバージョンだと思っていた。
調べてみると、正確には、CPython互換の言語仕様バージョン(MicroPythonが互換性を持つPython言語仕様のバージョン)、とのこと。
import sys
print(sys.version)
3.4.0; MicroPython v1.27.0-dirty on 2025-12-10Pythonの知識だけで独自のカメラガジェットを作れる記事を書いたのでよかったら読んでください。
ESP32を入門するなら、Amazonで手軽に買えるFreenoveのボードが品質が高そう🤩
ℹ️状況を整理してみる。
Pythonのasync/awaitの対応状況
本家Pythonのasync/await対応状況
Python 3.4: yield from を使った標準非同期I/Oライブラリ asyncio が誕生。
Python 3.5: 専用キーワード async/await が登場、ジェネレータで非同期処理をしなくてもよくなる。
MicroPythonのasync/await対応状況
筆者の環境「v1.27.0(3.4.0)」において、以下のasync/await構文が期待通りに動作する😮
import asyncio
async def task(name, delay):
for i in range(3):
print(name, i)
await asyncio.sleep(delay)
async def main():
await asyncio.gather(
task("A", 1),
task("B", 0.5),
)
asyncio.run(main())発見🤗
MicroPythonでは早い時期から async/await 構文をサポートしている
3.4.0は、CPython 3.4系との互換性を示すものであり、実際には後のPythonで追加された構文「async/await、f-stringなど」も一部取り込まれている
但し、Python互換を目指した組み込み向け実装であり、CPythonとはAPIや挙動が一部異なる
結論
MicroPythonでは、安心してasync/awitを使ってよさそう☺️
目が疲れたら目を休めて、ときどき遠くをみる習慣を!たまにはホットアイマスクでケアをする。