我移植了一个曾经在Julia 0.4到Julia 0.5工作并且遇到麻烦的程序。
这是该计划:
addprocs(3)
ref = @spawn factor(21883298135690819)
factors = fetch(ref)
@assert factors == Dict(234711901=>1,93234719=>1)
在Julia 0.5上运行时,我收到错误
错误:对工人2:
factor(21883298135690819,)已移至包Primes.jl 运行Pkg.add(" Primes")在Julia v0.5上安装Primes -
足够公平。但即使我进入交互式终端,我的代码仍然无法工作!以下是成绩单:
julia> Pkg.add("Primes")
INFO: Nothing to be done
julia> using Primes
julia> Primes.factor(21883298135690819)
Dict{Int64,Int64} with 2 entries:
234711901 => 1
93234719 => 1
julia> addprocs(3)
3-element Array{Int64,1}:
2
3
4
julia> ref = @spawn factor(21883298135690819)
Future(2,1,5,Nullable{Any}())
julia> factors = fetch(ref)
ERROR: On worker 2:
factor(21883298135690819,) has been moved to the package Primes.jl.
Run Pkg.add("Primes") to install Primes on Julia v0.5-
同样的问题!
我已阅读documentation,这似乎表明using
声明使代码可供所有进程使用,但事实并非如此。
我做错了什么?
答案 0 :(得分:4)
documentation说"使用DummyModule会导致在使用julia -p 2
"启动Julia时在所有进程上加载模块,这意味着,在REPL中,应该运行{{ 1}}首先。
所以你应该在addprocs(2)
之前加上addprocs(3)
。