👻

ISUCON 5のPython実装がBottleを使っていた理由

2020/10/01に公開

https://github.com/bottlepy/bottle

以下にあげる観点から検討し、総合的に良さそうだと思ったBottleを選びました。

Python3に対応している

今回のISUCONではPython3を使いたいと思っていました。

3が出てから何年も経っていますし、主要なライブラリの2/3両対応も進んでいます。

Pythonでは2から3になっても大きく見た目や書き方が変わるようなことはなく、3系を使ったことのない2系のユーザーでも問題なく読めるし書けるという点がありました。

有名どころのフレームワークはPython3に対応していましたので、どれも使えそうでした。

依存が標準ライブラリのみ

ISUCONでは短時間で問題を解決する必要があり、出題側としてもそこに集中してもらいたいので、フレームワークの学習コストが低いことが求められます。

Bottleが依存しているのは標準ライブラリだけです。標準ライブラリであれば使い慣れ把握していることが期待できますし、ドキュメントや情報も見つけられます。

もし他のサードパーティのライブラリに依存していると、フレームワークの使い方やオプションを調べたりするのにより時間がかかることになってしまいます。

選ばれなかったフレームワーク

CherryPy

http://cherrypy.org/

  • 歴史も知名度もある
  • サードパーティへの依存も無さそう
  • 開発が継続されている
  • ハンドラの書き方はクラスベースだがシンプルに書ける

テンプレートエンジンを持っていないこと、Bottleよりファイル数とサイズが大きかった。

Flask

http://flask.pocoo.org/

ISUCON 4 ではPython実装で使われていた。

  • 知名度が高い
  • 日本語の情報も多い
  • 開発が継続されている
  • ハンドラはSinatra風に簡単に書ける

Blueprintsなど大きめの規模のアプリ向けの機能なども持っており、フレームワークの規模が大きい。

Tornado

https://github.com/tornadoweb/tornado

  • 知名度はそこそこ?
  • サードパーティへの依存は少しある
  • 開発が継続されている(いまはFacebookが持っている)
  • ハンドラの書き方はクラスベースだがシンプルに書ける

個人的には好きなフレームワーク。

非同期IOをサポートしているので、ISUCONのような大量にベンチマーカーがアクセスしてくる用途には向いているかもしれない。ただ非同期IOをシングルスレッドで効率よく処理するようになっており癖もあるので、参加者が混乱するとよくないと思い採用しなかった。

たぶん決勝の問題をPythonでやるときはTornadoに置き換えると強い。

Falcon

http://falconframework.org/

速度が売り文句らしい。

規模が大きめだった。

Django

https://www.djangoproject.com/

さすがに重すぎだと思った。

Pyramid

http://www.pylonsproject.org/

何となくISUCONにはマッチしなそうだと思った。

この記事はQiitaの記事をエクスポートしたものです

Discussion