Parallel processing 同时打断忙碌的工人

Parallel processing 同时打断忙碌的工人,parallel-processing,julia,Parallel Processing,Julia,我刚开始在一个有多个内核的集群上运行我的Julia代码,所以我修改了代码,试图利用这一点。我用julia-p12启动julia。然而,我总是得到一个错误,忙碌的工作人员被打断 对于这段代码,我让主进程创建一个名为可结果的类型数组。我想执行一个函数gamerunner,该函数将可生成的作为输入,并返回一个Int 在我的第一次尝试中,我尝试了result=pmap(gamerunner,Train) 数据大小正确,但错误为 “警告:强制中断忙碌的工作人员”错误(“流为 已关闭或无法使用“ 他回来了

我刚开始在一个有多个内核的集群上运行我的Julia代码,所以我修改了代码,试图利用这一点。我用
julia-p12
启动julia。然而,我总是得到一个错误,忙碌的工作人员被打断

对于这段代码,我让主进程创建一个名为
可结果的
类型数组。我想执行一个函数
gamerunner
,该函数将
可生成的
作为输入,并返回一个
Int

在我的第一次尝试中,我尝试了
result=pmap(gamerunner,Train)

数据大小正确,但错误为

“警告:强制中断忙碌的工作人员”错误(“流为 已关闭或无法使用“

他回来了

我不知道该怎么办,所以我试了一下

@sync result=pmap(gamerunner,Train)
@parallel for i=1:size(Train)[1]
Train[i].result=gamerunner(Train[i])
end
for i=1:size(Train)[1]
fetch(Train[i].result)
end

这就产生了同样的错误。然后我在文档中看到,
@sync
并没有说它与
pmap
一起工作,所以我决定试试
@parallel

@sync begin
@parallel for i=1:size(Train)[1]
Train[i].result=gamerunner(Train[i])
end
end
并且得到了错误

“运行终结器时出错:InterruptException()警告:强制 正在中断忙碌的工作进程错误(“流已关闭或 “无法使用”)

最后,我想既然我已经读了很多关于
获取
,也许我必须这样做才能让它工作,所以我试了一下

@sync result=pmap(gamerunner,Train)
@parallel for i=1:size(Train)[1]
Train[i].result=gamerunner(Train[i])
end
for i=1:size(Train)[1]
fetch(Train[i].result)
end
这给了我一个错误

“警告:强行打断忙碌的工作人员警告:无法 解雇所有工人”

我越来越糊涂了。非常感谢你的帮助

编辑 评论中的示例:

addprocs(2)
@everywhere function foo(test) sleep(2) end
Train=Matrix(0,1)
for i=1:60
  Train=[Train;0]
end
pmap(foo,Train)

@sync
不使用
pmap
执行任何操作,因为它在所有工作进程完成之前不会返回,这意味着它是不必要的。也就是说,我不知道为什么你们的员工会被打断。你们能举一个完整的例子吗?某种极小的例子,它再现了错误?如果没有示例,这是不可能调试的。感谢您的回复:这里有一个示例:
@everywhere cd(“/home/aesche/”)@everywhere include(“foo.jl”)Train=i=1:60 Train=[Train;0]end pmap(foo,Train)
foo.jl:
函数foo(test)sleep(2)end
此返回:运行终结器时出错:InterruptException()警告:强制中断繁忙的工作人员ArgumentError(“流已关闭或不可用”)我不知道foo.jl.foo.jl中的内容是
函数foo(测试)sleep(2)end
。但是,我做了另一个测试,删除了@everywhere命令和pmap命令,它给出了相同的错误。