asyncio

pythonのslackclientで非同期タスクを実行したらValueErrorになった話

最近「ちょっとslack botでも書くか」と思う機会があった。そのときに色々思うことがあったのでメモ。 slack botを書く機会があった。どのライブラリを使うのが良い? 現状ではslack自身が出しているライブラリをそのまま使うのが良いのではないかと思う。 g…

graphqlのdataloader的なもの(bulk query)について考えてみる

そろそろノルマがやばいのでdataloderを支えるような概念について考えてみることにする。 例えば以下のようなコードは3回queryを実行する。 u0 = Users.get(1) u1 = Users.get(2) u2 = Users.get(3) 実際のアプリケーションでは、これらのqueryがコード上の…

prestringがasync/awaitをサポートした

github.com prestringがasync/awaitをサポートした。 (そしてしれっとmypyで型をつけた(実はこちらのほうが大変だった)) prestring? prestringは文字列を生成するためのライブラリ。with構文を乱用している。 例えば以下の様なコードが 00main.py from p…

pythonのasyncioでrun_in_executor()を使ってもブロックしてるように見えて上手く処理を逃がせないと感じたとき。

asyncioを使っていて、awaitableな関数群で構成されていないコードセットを無理やり非同期化してお茶を濁す時にrun_in_executor()が使われる。 ただしこのrun_in_executor()を使っても上手く処理を別スレッドに逃がせずという事態に陥ることもある。その理由…

pythonで複数のhttp requestを同時に投げる方法(requests)について

時折、ちょっとしたスピードアップにhttp(https) requestを並列で投げたい場合がある。aiohttpなどを使っても良いが既存のコードを書き換えるのもめんどくさい。そのようなときの方法のメモ。 concurrent.futuresを使う方法も考えられるけれど。今回はasynci…

asyncioのloopをどうするかということについて考えてみた

はじめに pythonには非同期用の標準ライブラリとして asyncio というモジュールが用意されている。このasyncioを使う際にevent loopの取り扱いに悩むことがあるかもしれない。どうすれば良いのかを少しだけまじめに考えてみた。 ライブラリ or アプリケーシ…

asyncioで実行されるタスクの実行順序の制御について

asyncioで実行されるタスクの実行順序の制御について asyncioのドキュメント を見ると、asyncio.asyncを使う際には、yield fromを忘れると終了を待たずにつぎの処理が実行される。このため以下の様な不具合があるというようなことが書かれている。 実行順序…