If a variable is assigned to anywhere in a function, it is treated as a local variable. shared_array += some_other_array
is equivalent to shared_array = shared_array + some_other_array
. Thus shared_array
is treated as a local variable, which does not exist at the time you try to use it on the right-hand side of the assignment.
If you want to use the global shared_array
variable, you need to explicitly mark it as global by putting a global shared_array
in your function.
The reason you don't see the error with shared_array[i,:] = i
is that this does not assign to the variable shared_array
. Rather, it mutates that object, assigning to a slice of it. In Python, assigning to a bare name (e.g., shared_array = ...
) is very different from any other kind of assignment (e.g., shared_array[...] = ...
), even though they look similar.
Note, incidentally, that the error has nothing to do with multiprocessing.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…