2016-09-19 5 views
2

関数を文字列引数で提供する並列関数を実行します。まず文字列から式に解析され、次に並列に実行されます。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

次のように私は、コードの周り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モジュールメインを使用しているという考えを持っている私は、この方向で何かをしようとしたが、それは

を動作するように取得していません
関連する問題