[書評]ハイパフォーマンスPython

https://www.amazon.co.jp/dp/4873117402

 Pythonは記述力が高く習得しやすい言語と言われています。特に機械学習が注目されたことにより、人気のある言語となりました。その一方で、処理が重い言語としても有名です。本書はなぜ処理が重いのか、どのようにパフォーマンスを高めるかについて言及しています。

ボトルネックの発見のためのプロファイリング

 Pythonではボトルネックの発見のためのプロファイリング機能があります。IPythonの%timeitに、time.time()、timingデコレータなどの技法です。そのほかにもcProfile、line_profilerなどがあり、本書ではこれらの説明をしています。
 また、プロファイリングの成功には時間と集中が必要です。テスト箇所を分離し、理解し、コードの正確さを維持する単体テストを実施し、非効率な部分を見つけるための現実的なデータを入力する必要があるからです。
 また、本書の著者は、BIOSレベルのアクセラレータを無効にしておくことを推奨しています。何故なら、PCによってはIntel TurboBoost機能があり、冷たいCPUはよりコードを高速にするかもしれないからです。そのほかにもベンチマークを安定化させる設定があげれています。

Pythonのコード

効率的なプログラムを書くには使用するデータ構造の特徴を理解すると良いです。本書では、リストとタプル、辞書と集合、イテレータとジェネレータなどが紹介されており、それぞれの長所、短所が説明されています。
 また、Cython、Numpyなどのモジュールを使用した場合、どのくらい処理速度が変わるかを説明しています。そのほかにも並列化、muliprocessingモジュール、クラスタについても説明がされています。

RAMの使用量の削減

 Pythonの基本データ型のオブジェクトはコストが高いので、効率よく処理をするコツを紹介しています。それだけでなく、numpyやarrayモジュールなどを使用した場合のRAMの使用量の比較、説明をしています。

現場に学ぶ

 Pythonで大規模なデータとスピード重視で成功を収めた会社として、Adaptive Labのソーシャルメディア分析(SoMA)の紹介がされています。Pythonをコアに、設計、開発方法、保守を簡単に説明しています。
 そのほかに著者からのアドバイスがいくつかありますので、紹介します。


コミュニケーション、コミュニケーション、コミュニケーション
- まずは顧客の問題を理解すること。要望を理解し、混乱なく、見通しをつけるまで意識を合わせ、事前に解決策の検証方法についても合意をしておくと良いです。
KISS(Keep it simple, stupid: とにかく単純化すること!)
- 単純に作り、必要なら改良を繰り返しましょう。「ひとつのことをうまくやる」というUnix哲学に従ったツールがおすすめです。
一時的な流行にご用心
- 顧客の耳に流行が入り、それを使いたいと言ったからといって、本当に必要かはわかりません。これはマーケティングの問題なので、慎重に両者を見極めてうまく説明する必要があります。

まとめ

この本は中級者から上級者のPythonプログラマー向けですので、内容は難しく感じました。ですが、プロファイリングの方法やデータの構造の説明はしっかりしており、サンプルコードもありますので内容は非常に面白く感じました。また、現場からのアドバイスは非常に参考になったかと思います。




この記事が気に入ったらサポートをしてみませんか?