Я понимаю, что ваш вопрос о мутировании локальных struct
с удаленными работниками. Вы не можете сделать это, однако вы можете отправить копию нового struct
:
using Distributed
addprocs(2)
using Parameters
@everywhere using Parameters
@everywhere begin
@with_kw mutable struct Test
a::String = ""
b::String = ""
end
end
t = Test(a="some")
@everywhere function mutate(t::Test)
t.b = "newval"
t
end
fut = @spawnat 2 mutate(t)
newt = fetch(fut)
Теперь вы можете видеть, что newt содержит измененную копию t:
julia> dump(newt)
Test
a: String "some"
b: String "newval"
Однако значение t
остается прежним:
julia> dump(t)
Test
a: String "some"
b: String ""
Однако вы можете мутировать массивы на основе битов, если рабочие находятся на одном хосте. (В этом примере предполагается, что рабочие были добавлены с использованием предыдущего кода):
using SharedArrays
@everywhere using SharedArrays
sa = SharedArray([1,2,3,4])
@everywhere function mutate(sa::SharedArray)
sa[myid()] = myid()*100;
return nothing
end
fetch(@spawnat 2 mutate(sa))
Теперь давайте рассмотрим массив:
julia> display(sa)
4-element SharedArray{Int64,1}:
1
200
3
4