Python multiprocessing で CPU集約的処理の並列化
概要
Pythonのmultiprocessingモジュールを使用すると、CPU集約的な処理を効率的に並列化することができます。これにより、マルチコアCPUを最大限活用して処理時間を短縮することが可能です。特に大規模なデータ処理や計算が必要な場合に有用です。
解決する問題や課題
単一スレッドで処理を行う場合、CPUのコア数分の並行性を活かすことができず、処理時間が長くなるという課題があります。multiprocessingを使用することで、複数のプロセスを使って処理を分散し、並列処理を行うことができます。
前提知識・必要ライブラリ
- Pythonの基本文法
- multiprocessingモジュール
- Python 3.6以上
環境構築
# 必要ライブラリのインストール
pip install multiprocessing
実装コード
# CPU集約的な処理を並列化する例
from multiprocessing import Pool
def square_number(x):
return x*x
if __name__ == '__main__':
numbers = [1, 2, 3, 4, 5]
# プロセスプールを作成し、並列処理を行う
with Pool(processes=4) as pool:
squared_numbers = pool.map(square_number, numbers)
print(squared_numbers)
使用例
# ファイルの複数行を同時に処理する例
from multiprocessing import Pool
def process_line(line):
# ここで行の処理を行う
return processed_line
if __name__ == '__main__':
with open('data.txt', 'r') as file:
lines = file.readlines()
with Pool(processes=4) as pool:
processed_lines = pool.map(process_line, lines)
with open('output.txt', 'w') as output_file:
output_file.writelines(processed_lines)
テストコード
# テスト対象の関数
def square_number(x):
return x*x
def test_square_number():
assert square_number(2) == 4
assert square_number(5) == 25
応用・カスタマイズ
- 複数の処理を連結してパイプライン処理を構築する
- プロセス間通信を活用してデータの共有や連携を行う
- パフォーマンス最適化のためにプロセス数やチャンクサイズを調整する
関連技術
- concurrent.futuresモジュール
- joblibライブラリ
- Python公式ドキュメントのmultiprocessingガイド
—
この記事では、Pythonのmultiprocessingモジュールを使用してCPU集約的な処理を並列化する方法について紹介しました。マルチコアCPUを有効活用して処理時間を短縮するために、multiprocessingをうまく活用してみてください。