multithreading - Julia - worker 找不到功能

标签 multithreading julia

我目前正在使用 Atom 编辑器与 Julia 0.5 一起工作,但不知何故未能使我的工作线程可以使用函数。这是我的测试文件 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))

执行这个文件,我从 master 和 worker 得到一个“Hi”作为输出,master 也会输出“a is ...”行。但是工作人员不会,并且在 remotecall_fetch 行上它会抛出以下错误消息(缩短)
LoadError: On worker 2:
UndefVarError: testie not defined

http://docs.julialang.org/en/release-0.5/manual/parallel-computing/状态:使用 DummyModule 会导致模块在所有进程上加载;但是,该模块仅在执行该语句的模块中被纳入范围。仅此而已,我看不到如何解决这种情况。我尝试在 using 行之前添加一个 @everywhere,还尝试添加一个 @everywhere include("test.jl")就在它之前。没有帮助。这应该很简单,但我无法弄清楚。

在 SO 我只找到 Julia parallel programming - Making existing function available to all workers但这并没有真正回答我。

最佳答案

如果您使用 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

关于multithreading - Julia - worker 找不到功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40389039/

相关文章:

c++ - 使用 std::thread 在 C++ 中的单独线程中执行每个对象

scope - 在 julia 1.0.0 中使用 for 循环确定范围对初学者有意义吗?

multithreading - 在 Julia 中并行粒子群优化

julia - 从 Julia 中的离散分布中抽样

vector - 元组向量的逐元素比较 Julia

julia - 预编译 StatsPlots.jl 失败

java - 通知运行在不同对象中的线程

cocoa-touch - 使用 initWithObjects 将图像加载到 NSArray 会崩溃,但使用 NSMutableArray 不会?

c++ - 向 QML 应用程序发送键盘事件

java - Android java加载 fragment 无延迟