我目前正在使用Atom编辑器与Julia 0.5一起工作,并且无法以某种方式使我的工作线程无法使用函数。这是我的testfile test.jl:
module testie
export t1
function t1()
a= rand()
println("a is $a, thread $(myid())")
return a
end
end
if nprocs()<2
addprocs(1)
end
@everywhere println("Hi")
using testie
t1()
println(remotecall_fetch(t1,2))
执行此文件,我从主服务器和工作服务器输出“Hi”,主服务器也将输出“a is ...”行。但工作人员不会,并且在remotecall_fetch行上它会抛出以下错误消息msg(缩短)
LoadError: On worker 2:
UndefVarError: testie not defined
http://docs.julialang.org/en/release-0.5/manual/parallel-computing/状态:使用DummyModule导致模块被加载到所有进程上;但是,模块仅在执行语句的范围内进入范围。我无法看到如何解决这种情况。我尝试在使用行之前添加@everywhere,并尝试在它之前添加@everywhere include("test.jl")
。没有帮助。这应该很简单,但我无法弄清楚。
On SO我只找到了Julia parallel programming - Making existing function available to all workers,但这并没有真正回答我。
答案 0 :(得分:1)
如果您自己使用include
导入模块,那么您需要告诉julia您希望使用该模块中的t1
作为testie.t1
添加前缀
试试这个
if nprocs()<2
addprocs(1)
end
@everywhere include("testie.jl")
println(remotecall_fetch(testie.t1,2)) #NB prefix here
其中testie.jl
是:
module testie
export t1
function t1()
a= rand()
println("a is $a, thread $(myid())")
return a
end
end