BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GoogleがGrumpyでCPythonの並列実行性の問題を解決

GoogleがGrumpyでCPythonの並列実行性の問題を解決

ブックマーク

原文(投稿日:2017/01/11)へのリンク

GoogleはCPythonに存在するGlobal Interpreter Lockによって引き起こされる並列実行性の制限を、Goで新しいPythonランタイムを作成することで解決した。

GoogleはYouTubeのフロントエンドとAPIにPythonを使用しており、それはCPython 2.7上で動作している。CPython 2.7は、Pythonインタープリタのリファレンス実装である。コードは長年かけて数百万行に成長しており、うまく機能させるには、大抵、ランタイムのパフォーマンス調整が必要であった。しかし、彼らには解決できずにいた問題が1つあった。Googleによると、それは「CPythonで並列処理をうまく実行させることが非常に困難である」ということである。

他にも実施可能な解決策をいくつか調査した結果、GoogleはPythonコードをGoのランタイム上で実行することに決定した。Goの強力な並列性に対するサポートが理由である。Grumpyプロジェクトの誕生である。Grumpyでは、PythonコードをGoソースコードにトランスコンパイルし、その後、ターゲットプラットフォームのネイティブコードにコンパイルすることができる。中間Goコードは、Pythonオブジェクトを表すデータ構造に適用される一連の操作である。

Grumpyはコンパイルを使用するため、開発の自由度とインタープリタ言語の能力の一部を犠牲にする。しかし、これらの損失は、静的な分析による最適化の改善と、簡単なインポートによりGoパッケージを使用できるようになることで補われるとGoogleは主張している。

静的コンパイルよる他の影響は、GrumpyがCPythonで利用できるexec、eval、compileといったいくつかの動的な機能をサポートしておらず、「おそらくサポートすることはない」ということである。それらをサポートするには、「扱いにくく、実用的でないほど遅いコンパイルツールチェインで、Grumpyプログラムをバンドルする」必要がある。理論上は可能であるが、GrumpyチームはC言語拡張モジュールをサポートする予定もない。理由は「GrumpyにはCPythonとは異なるAPIとオブジェクトレイアウトが用意されている」ためである。

GoogleはGrumpyをCPython 2.7の代わりにしようとしている。将来的にGrumpyがPython 3.xをサポートすることを期待する人がいるかもしれないPython 3のサポートに関する質問の回答として、YouTubeのStaff Software EngineerであるDylan Trotter氏は「我々は巨大なPython 2.7コードベースを持っており、それに注目しています。私は間違いなくPython 3をサポートしたいです。」と述べた。また、彼は別のスレッドで「直近ではPython 3についての具体的な計画はないですが、長期的には間違いなくサポートしたいです。」と述べた。

GoogleはApache 2.0ライセンスで、GitHub上でGrumpyをオープンソース化した。開発者にコメント、貢献してもらうためである。そのためにフォーラムも作成された。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT