検索
特集/連載

「Python」次期バージョンがもたらすのは“改良”よりむしろ地獄?PythonからGILを取り除く是非【中編】

「GIL」を「Python」から削除する提案が承認されたことに伴い、Pythonのエコシステムを支えるライブラリ管理者にも新たな課題が生まれようとしている。どのような影響を与え得るのか。

Share
Tweet
LINE
Hatena

 プログラミング言語「Python」は、簡潔な文法や豊富なライブラリで人気を博している。同時に、複数のCPUコアを効率的に利用することが制限されている問題も抱えている。これはCPython(Pythonの標準実装)が持つ「GIL」(Global Interpreter Lock)に起因する問題だ。

 GILはデータの整合性を保つ一方で、並列処理の制約となっている。この問題を解決するため、PythonコミュニティーはGILの削除を検討し始めた。ただしこの変更は新たな課題をもたらす可能性がある。なぜ問題になり得るのか。本稿はその理由のうち3つを取り上げる。

「GILなしPython」がもたらすのは改良よりむしろ地獄?

理由2.複数バージョンをサポートする必要がある

 GILを廃止したPythonに切り替えるPythonエンジニアが増えれば、人気のPythonライブラリ(プログラム部品群)の管理者もそれに従うことをコミュニティーは期待する。一方でこうしたライブラリには根強いユーザーがいるため、GILがあるバージョンのPythonでも動作するようサポートを継続する必要がある。その結果、ライブラリの管理者は、2つの異なる仕組みを持つディストリビューション(配布パッケージ)を同時にサポートするという望ましくない状況に追い込まれる可能性がある。

理由3.外部関数と連携できなくなる

 Pythonの強みの一つは、「Java」や「C++」などのプログラミング言語で作成された関数やプロシージャ(複数の処理を1つにまとめたプログラム)を呼び出せることだ。こうした外部関数は現状、安全なシングルスレッド方式で呼び出されることを前提として実装されている。GILを廃止したPythonを正しく機能させるには、こうした外部関数も全て更新しなければならない。

理由4.stop-the-worldへの対処が必要になる

 複数のスレッドが関与するメモリ管理は、総じて難しいものだ。GILがないPythonで、不要なデータを削除して空き容量を増やす「ガベージコレクション」(GC)を実現するには、メモリを再利用するためにあるイベントが必要になる。それが2回の「stop-the-world」(STW)だ。

 STWはプログラムを完全に停止させるイベントだ。プログラムの一時停止時間は15秒になることもある。Pythonエンジニアにとって、そのような時間に及ぶプログラムの停止は受け入れがたいはずだ。


 次回は、5つ目と6つ目の理由を取り上げる。

TechTarget発 エンジニア虎の巻

米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る