GAE(Google App Engine)pythonのNDBで非同期機能を使う

GAE(Google App Engine)のpythonで、データベース(NDB)を使うときに非同期機能を使うとスピードが早くなるらしいので試してみた。

プログラムは全くの素人なので、非同期と、同期だと言葉の感覚的に同期の方が早そうなイメージなんだけど、実際は、非同期の方が早いらしい。これは図の説明を見たらなんとなく理解できた。

で、複数のデータを取得するときに、非同期で取得すると、一個づつ順番にデータを集めるんじゃなくて、一斉に複数の指令を出せるから、並列処理出来て早いということっぽい。

やり方は、幾つかあるようだけど、取り敢えず簡単に出来たのは以下。

「fetch」を「fetch_async」に置き換えて、「get_result()」で結果を受け取る。

A_future=B.fetch_async
C_future=D.fetch_async
E_future=F.fetch_async

A = A_future.get_result()
C = C_future.get_result()
E = E_future.get_result()

取り敢えずこんな感じで上手く言った。非同期で並列処理されているかどうかを確認するには、同じくGAE内で用意されている「Appstats」を使うとグラフで簡単にチェックできる。「Appstats」を使う設定は簡単で10分くらいでできる。これはめちゃくちゃ便利。

マニュアルを見ると、asyncの次にTaskletsというのが紹介されていて、yieldとか、イテレーターとかジェネレーターとか調べてて、まだイマイチ理解できていない状態。

最近は、ネットにわかりやすい情報がたくさんあるから、素人でもプログラムの勉強がし易いけど、そうなると、もうソフトの世界より、小型のドローンを中国でバンバン作っていたりするように、ハードの世界で成功する人が増えてくるような気がなんとなくする。


広告

コメントを残す