1
下記のコードをご確認ください。なぜPythonマルチプロセッシングで更新されないのですか?
私はdictを初期化し、それを関数fに送ります。私はreturn_dictのアドレスを調べました。それはプロセス内で変更されていません。だから私はdictが更新されるべきだと思った。
しかし、それはなぜ更新されないのですか?あなたのProcess()
from multiprocessing import Process
return_dict = dict({})
print id(return_dict)
def f(value, return_dict):
return_dict['value'] = value
print return_dict
p = Process(target=f, args=(100, return_dict))
p.start()
p.join()
print return_dict
しかしreturn_dictのメモリアドレスが変更されていません。それを説明する方法?それらが異なるオブジェクトである場合、アドレスは私が考えると同じであってはなりません。それらが同じオブジェクトであれば、変更は親プロセスに見えるようにする必要があります –
私は、メモリアドレスがプロセスのメモリ空間に相対的であり、コンピュータのメモリ内の絶対アドレスではないと仮定します。親プロセス内のオブジェクトがヒープの位置Xにある場合、子プロセスが生成されると、これは1対1のコピーを受け取ります。オブジェクトアドレスは、コンピュータ内の異なるプロセスおよび異なるメモリセグメントであっても、Xのままです。とにかく、セグメンテーション違反の原因となるため、子プロセスは親プロセスメモリにアクセスできません。 – Hannu