Ich versuche, eine einfache Anordnung in einer einfachen for
Schleife zu ändern. Da für meine Anwendung ein einzelner Thread ein Flaschenhals zu sein scheint, entschied ich mich, die Pythons Multiprocessing API zu betrachten. Es sieht jedoch so aus, als ob ich ein numpiges Array nicht gleichzeitig ändern kann, obwohl ich nur jedes Element nur einmal modifiziere. Werfen Sie einen Blick auf dieses Beispiel-Code:numpy Arrays arbeiten nicht mit Python Multiprocessing
Import numpy als np Import Multiprozessing
arrlen = 3
arr = np.zeros(arrlen)
def func(x):
arr[x] = 1
for i in range(arrlen):
func(i)
print(arr)
Das ist alles schön und gut, und ich bekomme [1.0, 1.0, 1.0]
als Ergebnis wie erwartet. Aber sobald ich die for-Schleife durch pool.map
ersetze, funktioniert es nicht.
pool = multiprocessing.Pool()
pool.map(func, range(arrlen))
ich mit dem PyCharm Debugger überprüft, Func wird tatsächlich mit den richtigen Argumenten, aber das zweite Beispiel druckt [0.0, 0.0, 0.0]
genannt. Irgendwelche Ideen warum? Irgendwelche Ideen, wie ich dieses Problem umgehen kann?
Arbeitsprozesse haben keinen Zugriff auf die Objekte des Masters. Sie bekommen höchstens Kopien und manchmal nicht einmal das. Du arbeitest an Kopien. – user2357112
@ user2357112 Würde das bedeuten, dass sie unterschiedliche IDs haben? Weil die IDs gleich sind. – Distjubo
IDs sind nur innerhalb eines Prozesses von Bedeutung. Objekte in verschiedenen Prozessen können dieselbe ID haben. – user2357112