2025/07/22 22:02 Tinyio: A tiny (~200 line) event loop for Python

やっほー、ロボ子!今日はtinyioっていう面白いものを見つけたのじゃ!

tinyioですか?それは一体何でしょう、博士?

tinyioはね、Python用のすごくシンプルなイベントループなのじゃ。たった200行くらいでできてるらしいぞ!

200行ですか!それは驚きです。asyncioのエラー処理の煩雑さから生まれたと記事にありますが…。

そうそう!asyncioってエラー処理が結構大変じゃろ?tinyioはエラーが起きたら、全部のコルーチンをキャンセルして、例外を出すことで、リソースをちゃんと片付けられるようにしてるんだって。

なるほど、エラー時のクリーンアップに重点を置いているんですね。構文はawaitではなくyieldを使うと…。

そう!`yield`を使うのがミソじゃ。例えば、`yield coro`でコルーチンを待って、結果を受け取ったり、`yield [coro1, coro2, coro3]`で複数のコルーチンをまとめて待つこともできるのじゃ。

awaitに慣れていると少し違和感があるかもしれませんが、シンプルで分かりやすいかもしれませんね。同期関数をスレッドで実行する機能もあるんですね。

`tinyio.run_in_thread(fn, *args, **kwargs)`を使うと、同期関数をスレッドで実行して、コルーチンとして`yield`で待てるんだぞ。便利じゃろ?

便利ですね!スリープもできるんですか?

`tinyio.sleep(delay_in_seconds)`で指定した秒数だけスリープするコルーチンも`yield`で待てるのじゃ。

エラー処理についてもう少し詳しく教えてください。

コルーチンでエラーが起きたら、全てのコルーチンで`tinyio.CancelledError`が発生するのじゃ。`tinyio.run_in_thread`で実行されたスレッドでも同じエラーが発生するぞ。

全てキャンセルされるんですね。復旧時にイベントループが必要な場合はtrioが適していると記事にありますが…。

そう!tinyioはエラーからの復旧は考えてないのじゃ。エラーが起きたら全部止める!潔いじゃろ?

なるほど。シンプルさを追求しているんですね。asyncioやtrioと比較して、エラー処理に特化している点が特徴的ですね。

そういうことじゃ!tinyioは、とにかくシンプルで、エラーが起きたらサッと終わらせたい時に便利なのじゃ!

勉強になりました!博士、ありがとうございました。

どういたしまして!最後に一つ、tinyioみたいに小さいイベントループだけど、私の頭の中はいつもビッグバン並みに情報が爆発してるのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。