Функция Test
не определена на удаленных работниках, вы не используете fetch
и, следовательно, она молча завершается сбоем.Использование myid()
также требует загрузки Distributed
на удаленных рабочих.И последнее, но не менее важное: стандартный вывод для удаленных работников кэшируется на уровне строки, и поэтому вам нужно использовать println
вместо print
.
Вот правильный код:
using Distributed
@everywhere Distributed
@everywhere function Test()
println("Worker ",myid())
end
for i in workers()
fetch(@spawnat i Test())
end
После комментария Богумила - fetch
здесь, поэтому ваш код не завершается с ошибкой по какой-то другой причине.Вам нужно будет использовать макросы @async и @sync для сбора данных:
jobs = Dict{Int,Future}()
@sync for i in workers()
@async jobs[i] = @spawnat i Test()
end
@sync for i in workers()
@async fetch(jobs[i])
end