如何远程从包中运行Julia函数?

时间:2017-04-03 05:57:33

标签: multiprocessing julia future

我移植了一个曾经在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声明使代码可供所有进程使用,但事实并非如此。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

documentation说"使用DummyModule会导致在使用julia -p 2"启动Julia时在所有进程上加载模块,这意味着,在REPL中,应该运行{{ 1}}首先。 所以你应该在addprocs(2)之前加上addprocs(3)