朱莉娅 - 工人无法找到功能

时间:2016-11-02 20:18:33

标签: multithreading julia

我目前正在使用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,但这并没有真正回答我。

1 个答案:

答案 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