For loop 朱莉娅:大数据移动的并行For循环

For loop 朱莉娅:大数据移动的并行For循环,for-loop,dictionary,parallel-processing,julia,For Loop,Dictionary,Parallel Processing,Julia,我想运行并行for循环。我需要我的每个进程都能访问两个大型词典,gene\u dict和transcript\u dict。这是我第一次尝试的 @everywhere( function EM ... end ) generefs = [ @spawnat i genes for i in 2:nprocs()] dict1refs = [ @spawnat i gene_dict for i in 2:nprocs()] dict2refs = [ @spawnat i transcrip

我想运行并行for循环。我需要我的每个进程都能访问两个大型词典,
gene\u dict
transcript\u dict
。这是我第一次尝试的

@everywhere( function EM ... end )

generefs  = [ @spawnat i genes for i in 2:nprocs()]
dict1refs = [ @spawnat i gene_dict for i in 2:nprocs()]
dict2refs = [ @spawnat i transcript_dict for i in 2:nprocs()]

result = @parallel (vcat) for i in 1:length(genes)
  EM(genes[i], gene_dict, transcript_dict)
end
但我在所有进程上都会遇到以下错误(不仅仅是在5个进程上):


我认为
@spawnat
会将我需要的三个数据结构移动到所有进程中。我的第一个想法是,这个动作可能需要一段时间,并行for循环试图在数据传输完成之前运行

数据由
@spawnat
移动,但它没有绑定到与主节点上的名称相同的变量。相反,数据保存在workers上相当隐藏的名为
Base.PGRP
Dict
中。要访问这些值,您必须
fetch
RemoteRefs,在您的情况下,它类似于


结果=@parallel(vcat)表示1中的i:长度(基因)
EM(fetch(基因[i]),fetch(基因[i]),fetch(转录本[i]))
结束

当我在互动julia会话中工作时,您的解决方案非常有效。但当我试图从控制台调用我的julia脚本时,我仍然得到了我提到的错误。你知道为什么会这样吗?我不明白为什么会有不同。如果从一个交互式julia会话运行脚本时使用
include(“stript.jl”)
,会发生什么情况?你能给出一个可复制的小例子吗?我已经在github的julia issues中发布了一些dropbox共享代码:警告vcat速度非常慢。改用类似sharedarray的东西。
exception on 5: ERROR: genes not defined
 in anonymous at no file:1514
 in anonymous at multi.jl:1364
 in anonymous at multi.jl:820
 in run_work_thunk at multi.jl:593
 in run_work_thunk at multi.jl:602
 in anonymous at task.jl:6
UndefVarError(:genes)