首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia并行文件处理

Julia并行文件处理
EN

Stack Overflow用户
提问于 2015-12-03 09:32:36
回答 1查看 596关注 0票数 2

我对Julia比较陌生,最近我一直试图以并行的方式处理一些文件。

代码语言:javascript
复制
for ln in eachline (somefile)
...
proces this line

    for ln2 in eachline (someotherfile)
..
..
    process ln and ln2
..
..

我一直试图用“everywhere”和“并行函数”来加快速度,但似乎对每个行函数都不起作用。

我是不是遗漏了什么?

谢谢你帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 12:51:03

@parallel宏中,我们已经知道:

代码语言:javascript
复制
@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()函数而无法完成它的任务。

但是,清单中有两种方案可以并行化进程部件

  1. 使用lis=readlines()收集一系列行,@parallel for li in lis
  2. 使用pmap()

Julia的pmap() (第483页)是为每个函数调用完成大量工作的情况而设计的。相反,@ for可以处理每一次迭代都很小的情况,可能只是将两个数字相加。

示例代码:

代码语言:javascript
复制
len=function(s::AbstractString)
      string(length(s)) * " " * string(myid());
    end
function test()
  open("eula.1028.txt") do io
    pmap(len,eachline(io))
  end
end
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34062307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档