在 Julia 中,我想在模块内部定义的函数中使用addprocs和pmap。这是一个愚蠢的例子:
module test
using Distributions
export g, f
function g(a, b)
a + rand(Normal(0, b))
end
function f(A, b)
close = false
if length(procs()) == 1 # If there are already extra workers,
addprocs() # use them, otherwise, create your own.
close = true
end
W = pmap(x -> g(x, b), A)
if close == true
rmprocs(workers()) # Remove the workers you created.
end
return W
end
end
test.f(randn(5), 1)
Run Code Online (Sandbox Code Playgroud)
这将返回一个很长的错误
WARNING: Module test …Run Code Online (Sandbox Code Playgroud) 我已经定义一个函数f(x, y, z)中Julia,我想平行计算f的许多价值观x,保持y和z固定.使用这种方法的"最佳实践"方法是什么pmap?
如果它是类似的pmap(f, x, y = 5, z = 8),这就是apply家庭处理固定参数的方式R,那会很好,但它看起来并不那么简单.我已经设计出了解决方案,但我发现它们不够优雅,我怀疑它们会为我的目的很好地概括.
f在一个函数g中包装g(x) = f(x, y = 5, z = 8).然后我简单地打电话pmap(g, x).这不像我想的那么简约.y和z当f被定义,然后调用pmap(f, x).这让我感到不舒服,在这种情况下我想要修复y某个变量的值a,其中a(有充分的理由)在定义的时候f没有定义,但是会被f调用时.它有效,但有点让我感到害怕.