Вам не нужно оборачивать функцию testcase
в @everywhere
, поскольку модуль уже @everywhere
:
@everywhere module tester
using Distributed
function testcase(num)
return sqrt(num)
end # function
function wrapper()
results = []
for i in range(1, 100; step=3)
# Utilize 3 processes
for j = 1:3
push!(results, remotecall_fetch(testcase, j, i+(j-1)))
end # for
end # for
return results
end # function
end
tester.wrapper()
возвращает ожидаемый результат:
102-element Array{Any,1}:
1.0
1.4142135623730951
1.7320508075688772
2.0
2.23606797749979
[...]
Но ваш код по-прежнему не выполняется параллельно, потому что вы вызываете testcase
и ждете результата, прежде чем продолжить. Функция pmap
(или @distributed for
с SharedArray
) может быть здесь лучшим вариантом:
@everywhere module tester
using Distributed
# Some function that returns a value
function testcase(num)
return sqrt(num)
end # function
# Another function that uses multiprocessing
wrapper() = pmap(tester.testcase,1:102)
end
Вы получите тот же ответ, что и раньше, поскольку код выполняется параллельно.
Обратите внимание, что потоки в Julia также возможны, если вы работаете с одним компьютером (но с несколькими ядрами).