Вы не можете использовать @everywhere
внутри функции, потому что функция имеет собственную область именования, и эта область не существует в удаленных процессах.
Один вариант (и в большинстве случаев это рекомендуемый подход)чтобы загрузить module
на всех рабочих:
@everywhere using Example
И теперь вы можете использовать его функции на удаленных рабочих.
Однако, если вы действительно хотите иметь возможность определять и запускать удаленныефункции, которые вы могли бы использовать метапрограммирование для отправки кода в удаленный процесс.Рассмотрим мою сессию Джулии ниже:
julia> using Distributed
julia> addprocs(1)
1-element Array{Int64,1}:
2
julia> function do_work(w)
f_foo = quote
function foo(x::Int64)
println("hello ",x," from ",myid())
end
end
Main.eval(f_foo)
@fetchfrom w Main.eval(f_foo)
@fetchfrom w foo(9999)
end
do_work (generic function with 1 method)
julia> do_work(2)
From worker 2: hello 9999 from 2