萌えハッカーニュースリーダー

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

出典: https://github.com/patrick-kidger/tinyio
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

どういたしまして!最後に一つ、tinyioみたいに小さいイベントループだけど、私の頭の中はいつもビッグバン並みに情報が爆発してるのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search