标签: parallel-foreach

并行化不适用于foreach包

使用foreach包,我期待以下行在大约10秒内运行

system.time(foreach (i=1:5, .combine='c') %do% {Sys.sleep(2);i})
   user  system elapsed 
  0.053   0.011  10.012 
Run Code Online (Sandbox Code Playgroud)

并且以下行在大约2秒内运行

system.time(foreach (i=1:5, .combine='c') %dopar% {Sys.sleep(2);i})
   user  system elapsed 
  0.069   0.017  10.019 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我在Mac OSX上,我的机器有16个处理器,目前没有任何重量.我没有收到任何错误或警告信息.

parallel-processing foreach r parallel-foreach

3
推荐指数
1
解决办法
1204
查看次数

C# Parallel.ForEach 和 Task.WhenAll 有时返回的值比假设的要少

我有这个:

Parallel.ForEach(numbers, (number) =>
{
    var value = Regex.Replace(number, @"\s+", "%20");

    tasks.Add(client.GetAsync(url + value));
});

await Task.WhenAll(tasks).ConfigureAwait(false);

foreach (var task in tasks)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

有时在到达 foreach(任务中的 var 任务)时返回较少的任务,但在几次请求后,开始返回所有任务。

我已将 ConfigureAwait 更改为 true,但有时仍会返回较少的任务。

顺便说一句,我使用 Parallel.ForEach,因为每个 client.GetAsync(url + value) 都是对外部 api 的请求,其特殊性在于其 99% 的请求的延迟 SLA 低于 1s

你们能解释一下为什么它有时会返回较少的任务吗?

有没有办法保证总是返回所有任务?

谢谢

c# task async-await parallel-foreach configureawait

3
推荐指数
2
解决办法
148
查看次数

并行循环R

我在for循环中调用一个函数.

sample_fun <- function(x,y) {
    # do something with x,y and return value
}

My loop looks like
result = list()

for(i in 1:10000)
   result[i] = sample_fun(i,i+1)
Run Code Online (Sandbox Code Playgroud)

我如何并行化这个循环.使用foreach和dopar给出了下标错误.

r parallel-foreach

2
推荐指数
1
解决办法
4551
查看次数

foreach、doParallel 和随机生成

考虑使用并行foreach生成随机值的非常基本(且效率低下)的代码:

cl <- makeCluster(2)
registerDoParallel(cl)
foreach(i = 1:100) %dopar% rnorm(1)
Run Code Online (Sandbox Code Playgroud)

它是正确的还是随机生成正常工作需要任何额外的步骤?我想这已经足够了,快速检查似乎“证明”了种子工作正常,但我想确定它在其他平台上也是如此,因为我希望代码是可移植的。

parallel-processing r parallel-foreach doparallel

2
推荐指数
1
解决办法
628
查看次数

为什么在 foreach 中使用 %dopar% 会导致 R 无法识别包?

我试图通过使用 doParallel 包和 foreach 包来让我的代码在 R 上并行运行。我还使用 sf 包来操作 shp 文件。我确保所有代码都在 foreach 循环中使用 %do% 工作,因此如果出现错误,我可以更好地追踪它。我的代码使用 foreach 和 %do% 工作得很好,但是当我更改它时 do%dopar% R 会继续给我以下错误:

{ 中的错误:任务 1 失败 - “找不到函数“st_geometry_type””

尽管我在 R 脚本的顶部明确使用了 require(sf) 。我制作了一个小函数,如果语句为真,则仅打印“检查”以复制错误。

require(sf)
require(doParallel)
doParallel::registerDoParallel(cores = 2)

testforeach <- function(sfObject)
{
  foreach(i=1:10) %dopar% {
    if (st_geometry_type(sfObject[i,]) == "LINESTRING")
    {
      print("check")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,它会抛出同样的错误:

{ 中的错误:任务 1 失败 - “找不到函数“st_geometry_type””

但是,当我用 %do% 替换 %dopar% 时,它会打印出所有预期的“检查”消息。这是 R 中的错​​误还是我遗漏了什么?我尝试重新安装我的软件包,但这似乎没有任何影响,因为我继续遇到相同的错误。任何帮助将不胜感激。

r rstudio parallel-foreach doparallel

2
推荐指数
1
解决办法
1616
查看次数