Pythonで並列タスクを起動する方法|multiprocessingによる並列処理の基本
Pythonプログラムが、互いに依存関係を持たない複数のサブプログラムに分割できる場合、それぞれのサブプログラムはプログラム全体の実行時に並行して動かすことができます。この概念はPythonにおける「並列処理」と呼ばれます。
multiprocessingモジュールを使った並列処理
multiprocessingモジュールを使用すると、メインプロセスの子プロセスを複数作成し、それらを並行して実行できます。以下のプログラムでは、まずmultiprocessing.Processクラスを継承した独自のプロセスクラスを定義し、start()メソッドで各サブプロセスを起動しています。
print文でプロセスIDを出力することにより、異なるサブプロセスが実際に動作していることを確認できます。また、time.sleep()メソッドを使うことで、各出力がわずかな遅延を伴いながら順番に表示される様子も観察できます。
なお、join()メソッドは、そのプロセスの処理が完了するまでメインプログラムの実行を待機させる役割を持ちます。これにより、プロセスが確実に順番通りに完了します。
コード例
import multiprocessing
import time
class Process(multiprocessing.Process):
def __init__(self, id):
super(Process, self).__init__()
self.id = id
def run(self):
time.sleep(1)
print("Running process id: {}".format(self.id))
if __name__ == '__main__':
p = Process("a")
p.start()
p.join()
p = Process("b")
p.start()
p.join()
p = Process("c")
p.start()
p.join()
実行結果
上記のコードを実行すると、次のような結果が出力されます。
Running process id: a Running process id: b Running process id: c
このように、multiprocessingモジュールを活用することで、独立したタスクを個別のプロセスとして起動し、効率的に並列実行することが可能になります。
-
Matplotlibを使ってPythonで複数の図を横並びに描画する方法
Matplotlibで複数の図を並べて描画する手順 PythonのMatplotlibを使えば、subplot()メソッドを活用することで、複数の図を1つのウィンドウ内に横一列に並べて簡単に表示できます。ここでは、同じランダムデータを4種類のカラーマップで可視化する例を紹介します。 具体的には、以下の手順で実装します。 numpyを使ってランダムなデータ(5×5の行列)を作成します。 plt.subplot(nrows, ncols, index)で現在の図にサブプロットを追加します。今回は「nrows=1、ncols=4」のレイアウトで、index=1から順に配置していきます。 imsho
-
Pythonのソケットエラー48(Address already in use)の原因と解決策
ソケットエラー48は、プロセスがすでに使用中のポートへバインドしようとした際に発生するPythonのエラーです。エラーメッセージとしては「socket.error: [Errno 48] Address already in use」と表示されます。「socket.error: [Errno 48] Address already in use」エラーの原因調査の結果、このエラーの主な原因は以下の通りです。ポートへのプロセスのバインド: サーバー上でプロセスを作成すると、インターネットと通信するためにポートが使用されます。ポートとは、一度に一人のゲストしか受け入れられないホストのようなものです