我偶然发现了一些东西:各种
ClusterManagers
函数和操作,例如 workers()
、nworkers()
、procs()
、nprocs()
等)在运行代码时工作正常,除非它在模块内部。
这是一个基本测试用例的内容
JuliaTest.jl
:
using MPI
using ClusterManagers
println(workers()," ",nworkers()," ",procs()," ",nprocs())
与
julia -p 3 JuliaTest.jl
我得到正确的结果:
[2, 3, 4] 3 [1, 2, 3, 4] 4
但是,当使用模块中包含的完全相同的代码时:
module JuliaTest
using MPI
using ClusterManagers
println(workers()," ",nworkers()," ",procs()," ",nprocs())
end
我收到错误:
ERROR: LoadError: UndefVarError: `workers` not defined
Stacktrace:
[1] top-level scope
@ ~/JuliaTest.jl:6
in expression starting at /home/JuliaTest.jl:1
这有什么原因吗?有解决办法吗?
显然这是因为模块没有暴露在
Distributed
包中,添加 using Distributed
解决了这个问题。