私はPythonのマルチプロセッシングを使用してワーカープロセスを起動します。親プロセスで見ることができるサブプロセス内の配列を更新できるようにする必要があります。私はそれを達成するためにmultiprocessing.Manager()
を使用します。Pythonでmultiprocessing.Manager()配列を使用する方法
a = multiprocessing.Manager().Array('f', [0,0])
a
<ArrayProxy object, typeid 'Array' at 0x7f4e2b4eeda0>
a.value
Traceback (most recent call last):
File "<blender_console>", line 1, in <module>
AttributeError: 'ArrayProxy' object has no attribute 'value'
Value('f', 0.0)
を作成すると、このように操作できます。私がdir(a)
を見ると、明白な関数や属性が呼び出されることはありません。この点については、Pythonのドキュメントは実際にはあいまいです。
通常 'array.array'オブジェクトのいずれか、' .value'属性を持っていません。それには何が含まれると思いますか? – larsks
***あなたは実際に*** ArrayProxyオブジェクトを更新しようとしましたか?それはあなたがここでやっているようなものではないようです。 – Abdou
私はそれを他のプロセスに渡しました。私はそれを印刷して値を見ることができ、私は[i]を使って各値にアクセスできることが分かりました。だから私はそれが実際にサブプロセスの配列の値を更新する唯一の方法だと思います。私は、各要素を反復して更新するのではなく、アトミック操作でもない、1つのステップで配列全体を設定できることを期待していました。私の目標は、単純にサブプロセスの配列の値を親プロセスで表示できる原子的な方法で更新することです。妥当な期待は 'a.set_value([1.0,2.0])'のようです。 –