メインコンテンツへスキップ
見出し画像

豆知識 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 ESP32S3

    sys.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-10


    Pythonの知識だけで独自のカメラガジェットを作れる記事を書いたのでよかったら読んでください。


    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を使ってよさそう☺️




    目が疲れたら目を休めて、ときどき遠くをみる習慣を!たまにはホットアイマスクでケアをする。



     
     
    TOEIC955。note月間4万ビュー/週に最も見られた記事に選出の経験。社会の役に立つロボットを作る。未来への影響も考える。プログラミング、電子工作、ガジェット自作などの試行錯誤を発信中。基本真面目だがユーモアを添えることも。Amazonアソシエイト参加者。収益は実験に活用。

    あなたへのおすすめ