在Julia中并行运行解析的函数

时间:2016-09-19 08:18:27

标签: parallel-processing julia

我想并行运行一个函数,其中函数是通过字符串参数提供的。它首先从字符串解析为表达式,然后并行运行。

问题是所有工作进程都不知道字符串参数。

我怎样才能做到这一点:

module test

function run(f)

 @everywhere f_exp = eval(parse(f))

 values = SharedArray(Float64,2)
 @sync @parallel for i = 1:2
  values[i] = f_exp(i)
 end

 return mean(values)
end

end

# RUN AS FOLLOWS
# @everywhere include("c:\\projects\\evaluator\\test.jl")
# test.run("function func(x) return 2*x end")

我也试过@everywhere f_exp = eval(parse("@everywhere $f")),虽然我没想到它会起作用......但事实并非如此。

如何让每个过程知道参数?

@everywhere f作为函数运行的第一行也没有做任何事情。

1 个答案:

答案 0 :(得分:1)

如果我的代码周围没有module...end,我可以使用它,如下所示:

function run(f)

 @eval @everywhere f = $f
 @everywhere f_exp = eval(parse(f))

 values = SharedArray(Float64,2)
 @sync @parallel for i = 1:2
  values[i] = f_exp(i)
 end

 return mean(values)
end

如果我用module...end包围此函数,我会收到类似于以下错误的错误:## 9#11未定义(在工作程序2上)

我知道它不能与module...end一起使用的原因是@everywhere使用模块Main ...我尝试了这个方向,但没有让它工作