【发布时间】:2016-12-14 00:25:00
【问题描述】:
我一直在使用sendto()方法在worker之间发送变量
我的印象是,在 Julia 中,函数是“一等公民”,但我无法使用 sendto() 方法在工作人员之间传递函数
在工作人员之间传输预定义方法的推荐方式是什么?
更新
我好像可以使用 sendto() 方法发送匿名函数
a = function(x)
x*2
end
sendto(2,a=a)
remotecall_fetch(2,a,5)
4
相对
function g(x)
x*2
end
sendto(2,g=g)
remotecall_fetch(2,g,10)
ERROR: On worker 2:
function g not defined on process 2
这在某些情况下就足够了,但我需要能够发送已定义的函数,因为它们中的大多数都很复杂并且在启动 julia 时包含的脚本中定义
【问题讨论】:
-
我建议将此作为一个自我回答的问题。 (即从问题中删除您的答案并将其放入答案中)
-
我不想发送匿名方法,我想发送函数
-
您能否提供更多关于您的用例的详细信息(您的 julia 版本也会很好)。
remote_call是将函数发送给工作人员,然后调用它的更常用方法。从 0.5 开始,它只发送一次。 github.com/JuliaLang/julia/pull/16808 -
在 v0.4 中,最好的方法是在函数定义处使用
@everywhere,或者使用@spawnat。 -
对于您的包,您可能希望有一个
setup_parallel()函数,该函数在一个文件上调用include,该文件只是@everywhere定义了适当的方法(您可能需要@eval @everywhere来获取它在全球范围内)