我对Julia比较陌生,最近我一直试图以并行的方式处理一些文件。
for ln in eachline (somefile)
...
proces this line
for ln2 in eachline (someotherfile)
..
..
process ln and ln2
..
..我一直试图用“everywhere”和“并行函数”来加快速度,但似乎对每个行函数都不起作用。
我是不是遗漏了什么?
谢谢你帮忙。
发布于 2015-12-03 12:51:03
从@parallel宏中,我们已经知道:
@parallel [reducer] for var = range
body
end指定的范围是分区的,并在所有工作人员之间本地执行。
为了在最短的时间内完成上述工作,@parallel获取length(range),然后在nworkers()之间对其进行分区。
有关更多细节,您可以:
。见宏输出-> macroexpand(:(@parallel for i in 1:5 i end))
或者:
。检查宏源-> milti.jl
EachLine是朱莉娅迭代器之一,它实现了可迭代接口的所有强制性方法,但length()不是其中之一。(检查一下这个讨论),因此EachLine不是一个范围,而@parallel由于缺少length()函数而无法完成它的任务。
但是,清单中有两种方案可以并行化进程部件
lis=readlines()收集一系列行,@parallel for li in lispmap()Julia的pmap() (第483页)是为每个函数调用完成大量工作的情况而设计的。相反,@ for可以处理每一次迭代都很小的情况,可能只是将两个数字相加。
示例代码:
len=function(s::AbstractString)
string(length(s)) * " " * string(myid());
end
function test()
open("eula.1028.txt") do io
pmap(len,eachline(io))
end
endhttps://stackoverflow.com/questions/34062307
复制相似问题