首先,你应该总是需要声明你在数组中持有什么[]
means Any[]
这几乎从来都不是一个好主意。
让我们考虑这个带有占位符的向量:
julia> a=[Int[] for _ in 1:8]
8-element Vector{Vector{Int64}}:
[]
[]
[]
[]
[]
[]
[]
[]
This Vector
包含 8 条对其他内容的引用Vector
s.
现在让我们分发它:
julia> using Distributed; addprocs(4);
julia> @everywhere using DistributedArrays
julia> b = distribute(a)
8-element DArray{Vector{Int64}, 1, Vector{Vector{Int64}}}:
[]
[]
[]
[]
[]
[]
[]
[]
这个新的b
现在可通过所有工作进程使用,其中每个工作进程都拥有其localpart
它的。让我们变异它吧!
julia> fetch(@spawnat 2 append!(localpart(b)[1], [1,2,3,4]));
julia> fetch(@spawnat 3 append!(localpart(b)[2], [10,20]));
julia> fetch(@spawnat 3 push!(localpart(b)[2], 30))
3-element Vector{Int64}:
10
20
30
我们可以看到一切都按预期工作(我们已经使用fetch
以确保我们的代码实际上在远程工作人员上执行)。
让我们知道检查主进程的状态b
:
julia> b
8-element DArray{Vector{Int64}, 1, Vector{Vector{Int64}}}:
[1, 2, 3, 4]
[]
[]
[10, 20, 30]
[]
[]
[]
[]
可以看到我们已经成功利用远程工作者进行变异b
.