在同一个模块中运行函数并在不同的进程

时间:2018-01-17 21:31:52

标签: multiprocessing julia

如果我有以下Julia代码段,是否有任何方法可以使用多个进程运行for循环,而无需将complicated放入额外文件并执行@everywhere include("complicated.jl")之类的操作?

否则,这些过程似乎无法找到该功能。

function complicated(x)
    # long and complicated computation
    x^2
end

function run()
    results = []
    for i in 1:4
        push!(results, @spawn complicated(3))
    end
    return mean(results)
end

1 个答案:

答案 0 :(得分:0)

只需在@everywhere宏的所有处理器中注释要定义的表达式(在Julia中,所有内容都是表达式):

julia> addprocs(Sys.CPU_CORES)
12-element Array{Int64,1}:
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13

julia> @everywhere function complicated(x)
           # long and complicated computation
           x^2
       end

julia> function main()
           @sync results = @parallel vcat for i in 1:4
               complicated(3)
           end
           return mean(results)
       end
main (generic function with 1 method)

julia> main()
9.0

注意runBase中已存在的功能。