【发布时间】:2015-08-21 14:39:43
【问题描述】:
在模拟分布式推理的并行应用程序中,我希望有一个“初始化步骤”,所有“从属”从“主”接收一些初始信息,然后开始他们的任务。
目前我有一个基于sendTo 函数的工作实现(代码在堆栈溢出时找到here),但我认为它不能保证工作人员在完成之前不会启动它的任务收到初始对象。
这是一个粗略的 MWE
function sendTo(p::Int; args...)
for (nm, val) in args
@spawnat(p, eval(Main, Expr(:(=), nm, val)))
end
end
a = 5
addprocs(4)
[sendTo(worker,a=a+randn()) for worker in workers()]
@everywhere begin
println(a)
end
上述“有效”,但我如何确定在工作人员收到a 的定义之前不会执行@everywhere 块中的命令?
Rmk:对于我正在工作的上下文,我想保留两个不同的块,一个用于传播数据,一个用于处理数据。
Other rmk:抱歉,如果这是微不足道的,我对处理并行性很陌生(对 Julia 也很陌生)
【问题讨论】:
-
您可能还对这个问题 (stackoverflow.com/questions/37287020/…) 感兴趣,该问题讨论了
@sync和@async宏的操作以及如何使用它们来完成您感兴趣的任务类型在。