2017-04-03 2 views
2

Je porte un programme qui fonctionnait dans Julia 0.4 à Julia 0.5 et qui a des problèmes.Comment exécuter une fonction Julia à partir d'un package à distance?

Voici le programme:

addprocs(3) 
ref = @spawn factor(21883298135690819) 
factors = fetch(ref) 
@assert factors == Dict(234711901=>1,93234719=>1) 

Lors de l'exécution sur Julia 0.5, je reçois l'erreur

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-

assez juste. Mais même quand je vais dans le terminal interactif, mon code ne fonctionne toujours pas! Voici la transcription:

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- 

Même problème!

J'ai lu le documentation qui semble indiquer que la déclaration using rend le code accessible à tous les processus, mais ce n'est pas le cas.

Qu'est-ce que je fais mal?

+4

mettre 'addprocs (3)' avant d'utiliser 'Primes'? – Gnimuc

Répondre

4

le documentation dit « à l'aide DummyModule fait que le module à charger sur tous les processus lors du démarrage de Julia avec julia -p 2 », ce qui signifie, dans REPL, on doit exécuter addprocs(2) d'abord. alors vous devriez mettre addprocs(3) avant using Primes.