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
解决方案