I'm trying to understand the most Julian way to perform a particular 
parallel programming task. Suppose I need function foo from module.jl to be 
available everywhere. Let's call the following code map_foo.jl:

@everywhere include("module.jl")
@everywhere using MyModule
pmap(foo,1:100)

That works fine, except when module.jl itself has other dependencies on 
other modules:

module MyModule

using DataStructures
export foo

function foo(i)
return Queue(i)
end

end # module

In this case, it works to call 

julia map_foo.jl

but when I call

julia -p 2 map_foo.jl

I get the following error

Warning: requiring "DataStructures" did not define a corresponding module.
Warning: requiring "DataStructures" did not define a corresponding module.
exception on exception on 2: 3: ERROR: ERROR: Queue not definedQueue not 
defined
 in
 in foo at /Users/madeleineudell/Dropbox/pestilli_icme_life 
(1)/src/julia/questions/module.jl:7
 in anonymous at multi.jl:834
 in run_work_thunk at multi.jl:575
 in anonymous at task.jl:834
foo at /Users/madeleineudell/Dropbox/pestilli_icme_life 
(1)/src/julia/questions/module.jl:7
 in anonymous at multi.jl:834
 in run_work_thunk at multi.jl:575
 in anonymous at task.jl:834

Does anyone know how I can successfully chain dependencies like this when 
using parallelism? Calling @everywhere on the import call in module.jl also 
doesn't fix the problem, strangely enough.

Of course, if I could put all my code into shared memory, I'd be much 
happier. I just saw an update <https://github.com/JuliaLang/julia/pull/4939> 
adding 
shared memory arrays, but I don't know if there's a way to get shared 
memory code!

Reply via email to