I find that putting everything required on workers into a module is the way
to go.
Then just use using Module (after adding workers)
This works for me (v0.4.5):
ProjectModule.jl:
module ProjectModule
using DataFrames
include("function1.jl")
export function1
end
function1.jl:
function function1(input::DataFrame)
# do something to input
println("function1 here")
end
Now test:
addprocs()
using DataFrames
using ProjectModule
df = DataFrame(A = 1:4, B = ["M", "F", "F", "M"])
pmap(function1, fill(df,10))
On Thursday, June 2, 2016 at 8:24:52 AM UTC+10, ABB wrote:
> Hello -
>
> I have the following problem: I would like to find a good way to import a
> collection of user-defined functions across several workers. Some of my
> functions are defined on DataFrames, but "using DataFrames" is not getting
> me anywhere on the other workers.
>
> I think the problem I am running into may result from some combination of
> the rules of scope and the command "using".
>
> Alternatively, given what I want to do, maybe running this with "julia -p
> N" is not the best way to make use of N workers in the way I want to.
>
> I open several workers: "julia -p 3"
>
> "using DataFrames" - this brings DataFrames into the 'main' worker's scope
> (I think), but not into the scope of subordinate workers.
>
> "using ProjectModule" - I am trying to load a module across all workers
> which contains several functions I have written (maybe this is not the best
> way to accomplish this task?)
>
> This error is returned:
>
> LoadError: LoadError: UndefVarError: DataFrame not defined
>
> ProjectModule looks something like
>
> module ProjectModule
> include("function1.jl")
>
> export function1
> end
>
> where function1 is defined as
>
> function1(input::DataFrame)
> #do something to input
> end
>
> I have tried a few things:
>
> - Running "@everywhere using DataFrames" from within the main worker (this
> has worked once or twice - that is, I can then use function1 on a different
> worker - but it isn't consistent)
>
> - Opening the workers at the outset using julia -p N -L
> ProjectModule.jl... (repeated N times) I get: "LoadError: UndefVarError:
> DataFrames not defined"
>
> - I also put "using DataFrames" into the ProjectModule.jl file. The
> program definitely hated that. (Specifically: I was warned that I was
> "overwriting DataFrames".)
>
> Is there a better way to load both the DataFrames package and the
> functions I have written across a couple of workers?
>
> Thanks!
>
> ABB
>