Parallel processing 如何在Julia中获取辅助工作程序的源目录?

Parallel processing 如何在Julia中获取辅助工作程序的源目录?,parallel-processing,julia,Parallel Processing,Julia,我发现使用Base.source\u dir()可以非常方便地将文件包含到Julia脚本中,因为使用脚本文件的相对路径很容易加载所有内容。这在并行化代码中无法正常工作。例如,如果在/username/test/中有一个名为test.jl的测试文件,其代码如下: @everywhere println(pwd()) @everywhere println(Base.source_dir()) 然后我们运行julia-p1test/test.jl /Users/username From

我发现使用
Base.source\u dir()
可以非常方便地将文件包含到Julia脚本中,因为使用脚本文件的相对路径很容易加载所有内容。这在并行化代码中无法正常工作。例如,如果在
/username/test/
中有一个名为
test.jl
的测试文件,其代码如下:

@everywhere println(pwd())
@everywhere println(Base.source_dir())
然后我们运行
julia-p1test/test.jl

/Users/username
    From worker 2:  /Users/username
/Users/username/test
    From worker 2:  nothing

包含另一个也在
测试
目录中的文件的最可靠的方法是什么?

我通常使用以下内容:

function sendto(p::Int; args...)
    for (nm, val) in args
        @spawnat(p, eval(Main, Expr(:(=), nm, val)))
    end
end    

SourceDir = Base.source_dir()    

for (idx, pid) in enumerate(workers())
    sendto(pid, SourceDir = SourceDir)
end    

@everywhere include(string(SourceDir, "/", "FileName"))

请参见此处(),了解
sendto()

source_dir = Base.source_dir()    
@eval @everywhere include(joinpath($source_dir, "test2.jl"))

正如@airties所指出的,这是改编自。我将把这两个问题作为解决方案。

同意。我继续并更改了标题,因为你的解决方案在很多情况下都应该有效,它将帮助我在几周后用谷歌搜索时找到它。哈哈。也请参阅这篇文章(),这是我获得函数的地方。它还有一个类似的
getfrom()
函数。我建议你把头衔改回去。你的新问题可能使这个问题基本上与另一个问题重复。实际上,我非常喜欢那篇文章中的
@eval@everywhere
解决方案