Pythonのマルチプロセスでプロセス間でデータを共有するにはどのような方法がありますか?
Pythonではmultiprocessingモジュールを用いてプロセスプールとキューを作成できます。
マルチプロセスプールとキューを作成するためのシンプルなコードサンプルを以下に示します(multiprocessing.Poolとmultiprocessing.Queueを使用):
import multiprocessing
# 创建进程池
pool = multiprocessing.Pool(processes=4)
# 创建队列
queue = multiprocessing.Queue()
# 将任务添加到队列中
for i in range(10):
queue.put(i)
# 定义任务函数
def process_task(item):
# 处理任务
result = item * 2
return result
# 使用进程池执行任务
results = []
while not queue.empty():
item = queue.get()
result = pool.apply_async(process_task, args=(item,))
results.append(result)
# 等待所有任务完成
pool.close()
pool.join()
# 获取任务结果
for result in results:
print(result.get())
上記サンプルコードでは、まずmultiprocessing.Poolを使用して4個のプロセスを持つプロセスプールを作成し、次にmultiprocessing.Queueでキューを作成しています。タスクはqueue.put()メソッド経由でキューに追加されます。
続けて、タスク処理用のタスク関数process_taskが定義されます。タスク処理では、 キューからタスクを取り出すqueue.get()メソッドが用いられます。
最後に、pool.apply_async()メソッドを使用し、処理関数のprocess_taskをプロセスポールに実行させ、結果をresultsリストに保存する。プロセスポール内のプロセスはキューから自動的にタスクを取り出し実行する。
最後に、pool.close()メソッドでプロセスプールを閉じ、pool.join()メソッドで、全てのタスクが終了するのを待ちます。
マルチプロセッシングのQueueは、プロセス間でのデータ共有に対応したプロセスセーフなキューです。