我编写了一个具有各种函数的Julia模块,我调用这些函数来分析数据。这些函数中有几个依赖于包,这些包包含在文件“NeuroTools.jl”的开头。
module NeuroTools
using MAT, PyPlot, PyCall;
function getHists(channels::Array{Int8,2}...我所拥有的许多函数对于并行运行都很有用,因此我编写了一个驱动程序脚本来使用远程技术/fetch将函数映射到不同的线程。为了在每个线程上加载函数,我使用-L选项启动Julia,在每个工作程序上加载我的模块。
julia -p 16 -L NeuroTools.jl parallelize.jl要将加载的函数引入作用域,"parallelize.jl“脚本有一行
@everywhere using NeuroTools我的并行函数正常工作并正确执行,但是每个工作线程都会从被覆盖的模块中发出一系列警告。
WARNING: replacing module MAT
WARNING: Method definition read(Union{HDF5.HDF5Dataset, HDF5.HDF5Datatype, HDF5.HDF5Group}, Type{Bool}) in module MAT_HDF5...
(contniues for many lines)是否存在以不同方式加载模块或更改范围以防止所有这些警告的方法?在这个问题上,文件似乎并不完全清楚。
发布于 2016-08-11 20:49:31
巧合的是我今天早上在找同样的事情
(rd,wr) = redirect_stdout()所以你需要打电话
remotecall_fetch(worker_id, redirect_stdout)如果你想把它完全关掉,这是可行的。
如果你想把它打开,你可以
out = STDOUT
(a,b) = redirect_stdout()
#then to turn it back on, do:
redirect_stdout(out)发布于 2018-02-03 08:17:25
这在最近的版本中得到了修正,如果您确实需要所有工作人员的作用域中的模块,那么@everywhere using ...是正确的。这个GitHub问题讨论了这个问题,并与其他相关讨论进行了链接。
如果在这种情况下仍然使用较早版本的Julia,只需在定义模块后用NeuroTools.jl编写NeuroTools.jl,而不是执行@everywhere using NeuroTools。版本0.5的朱莉娅文档的并行计算部分说,
using DummyModule使模块被加载到所有进程上;但是,只有在执行语句的过程中,模块才会进入作用域。
执行@everywhere using NeuroTools用来告诉每个进程在所有进程上加载模块,结果是一堆replacing module警告。
https://stackoverflow.com/questions/38905473
复制相似问题