等待在Julia的远程处理器上完成任务

tib*_*ibL 3 parallel-processing julia

在模拟分布式推理的并行应用程序中,我希望有一个"初始化步骤",其中所有"从属"从"主"接收一些初始信息然后开始他们的任务.

目前我有一个基于该sendTo函数的工作实现(这里的代码在堆栈溢出时被发现),但我不认为它保证了worker在收到初始对象之前不会启动它的任务.

这是一个粗糙的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
Run Code Online (Sandbox Code Playgroud)

上面的"工作",但我如何确定@everywhere在工作人员收到定义之前,块中的命令没有执行a

Rmk:对于我正在使用的上下文,我想保留两个不同的块,一个用于传播数据,另一个用于处理数据.

其他rmk:道歉,如果这是微不足道的,我对处理并行性很新(对Julia也很新)

Fel*_*ema 5

你可以只fetch为每个过程的结果.请参阅文档中示例

function sendTo(p::Int; args...)
    r = []
    for (nm, val) in args
        s = @spawnat(p, eval(Main, Expr(:(=), nm, val)))
        vcat([s],r)
    end
end
#...
[fetch(r) for r in [sendTo(worker,a=a+randn()) for worker in workers()]]
Run Code Online (Sandbox Code Playgroud)