Pythonでprocess関数を使って外部変数を変更する方法は何ですか?
PythonでProcess関数を使用して外部変数を変更するには、共有メモリを使用するか、Managerオブジェクトを使用する必要があります。
共有メモリを使用します。
- multiprocessingモジュールをインポートしてください。
- ValueまたはArrayオブジェクトを作成し、共有したいデータ型と初期値を渡してください。
- Processオブジェクトを作成し、共有メモリオブジェクトを関数に渡す。
- 関数内で、共有データを変更する際には、.valueプロパティ(Valueオブジェクトの場合)またはインデックス(Arrayオブジェクトの場合)を使用してください。
以下はサンプルコードです。
import multiprocessing as mp
def modify_shared_variable(shared_var):
shared_var.value += 1
if __name__ == '__main__':
shared_var = mp.Value('i', 0)
process = mp.Process(target=modify_shared_variable, args=(shared_var,))
process.start()
process.join()
print(shared_var.value) # 输出1
マネージャーオブジェクトを使用します。
- multiprocessingモジュールをインポートします。
- Managerオブジェクトを作成します。
- Managerオブジェクトを使用して、ValueまたはArrayメソッドを使って共有メモリオブジェクトを作成し、共有するデータタイプと初期値を渡す。
- Processオブジェクトを作成し、共有メモリオブジェクトを関数に渡す。
- 関数内では、共有メモリオブジェクトの.valueプロパティ(Valueオブジェクトの場合)またはインデックス(Arrayオブジェクトの場合)を使用して、共有データを変更します。
サンプルコードは以下の通りです:
import multiprocessing as mp
def modify_shared_variable(shared_var):
shared_var.value += 1
if __name__ == '__main__':
manager = mp.Manager()
shared_var = manager.Value('i', 0)
process = mp.Process(target=modify_shared_variable, args=(shared_var,))
process.start()
process.join()
print(shared_var.value) # 输出1
共有メモリやマネージャーオブジェクトを使用する際には、共有データを修正するすべての操作がアトミックであることを確認して競合条件を回避する必要があります。