Parallel processing 朱莉娅:正确使用pmap吗
为什么这不符合我的想法:Parallel processing 朱莉娅:正确使用pmap吗,parallel-processing,julia,pmap,Parallel Processing,Julia,Pmap,为什么这不符合我的想法: benjamin@benjamin-VirtualBox:~$ julia -p 3 julia> @everywhere(function foom(bar::Vector{Any}, k::Integer) println(repeat(bar[2],bar[1])); return bar; end) julia> foo={{1,"a"},{2,"b"},{3,"c"}} julia> pmap(foom, foo, 5) From w
benjamin@benjamin-VirtualBox:~$ julia -p 3
julia> @everywhere(function foom(bar::Vector{Any}, k::Integer) println(repeat(bar[2],bar[1])); return bar; end)
julia> foo={{1,"a"},{2,"b"},{3,"c"}}
julia> pmap(foom, foo, 5)
From worker 2: a
1-element Array{Any,1}:
{1,"a"}
这就是它的全部输出。我希望pmap迭代foo中的每个元组并调用foom
编辑:
当我不传入其他参数时,它可以正常工作:
julia> @everywhere(function foom(bar::Vector{Any}) println(repeat(bar[2],bar[1])); return bar; end)
julia> pmap(foom, foo)
From worker 3: bb
From worker 2: a
From worker 4: ccc
3-element Array{Any,1}:
{1,"a"}
{2,"b"}
{3,"c"}
如何将更多参数传递给pmap?函数pmap在一个集合中每个参数接受任意数量的参数
function pmap(f, lsts...; err_retry=true, err_stop=false)
函数f将为每个集合发送一个参数
function pmap(f, lsts...; err_retry=true, err_stop=false)
多参数函数示例
pmap使用1
pmap使用2
或者,可以将参数作为一个外部集合中的参数集合发送,该集合可以插入目标函数的多个参数中
julia> pmap((args)->f(args...),{{"a",2},{"b",1},{"c",3}})
From worker 2: process id = 2 s = a count = 2
From worker 3: process id = 3 s = b count = 1
From worker 4: process id = 4 s = c count = 3
3-element Array{Any,1}:
"aa"
"b"
"ccc"
从今天起,用于创建向量的大括号{}在Julia中停止使用。在示例中使用()或[]。
julia> pmap((args)->f(args...),{{"a",2},{"b",1},{"c",3}})
From worker 2: process id = 2 s = a count = 2
From worker 3: process id = 3 s = b count = 1
From worker 4: process id = 4 s = c count = 3
3-element Array{Any,1}:
"aa"
"b"
"ccc"