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
>

Reply via email to