当前位置: 首页 > 知识库问答 >
问题:

如何并行运行Scalaz任务

阳宾实
2023-03-14

我有一大堆Scalaz任务。创建方式如下:

val tasks = for (i <- 1 to 50) yield {
  Task.delay({
    Thread.sleep(100L)
    println(i)
    i
  })
}

val r = Nondeterminism[Task].gatherUnordered(tasks).run
println(r.mkString(" "))

我希望这些任务并行运行。以随机顺序打印数字,不要花5秒钟(每个任务有50个任务和100毫升睡眠)。

但是,很明显,每个任务需要100毫秒,所有任务都需要5秒钟,并且创建的列表是有序的。

如何并行运行它们?任务在哪里运行线程

共有1个答案

徐皓君
2023-03-14

Task.delay暂停对其参数的求值,但它没有说明求值将发生在何处。您需要Task.apply,它具有相同的签名,只是它接受一个隐式ExecutorService,该服务将决定在哪个线程中进行求值:

import scalaz.Nondeterminism, scalaz.concurrent.Task

val tasks = for (i <- 1 to 50) yield {
  Task {
    Thread.sleep(100L)
    println(i)
    i
  }
}

val r = Nondeterminism[Task].gatherUnordered(tasks).run
println(r.mkString(" "))

这将使用默认的ExecutorService,它包装一个固定的线程池。如果您想要不同的策略,您可以将不同的ExecutorService放入隐式范围,或者在第二个参数列表中显式地为Task.apply提供一个。

 类似资料:
  • Jenkins管道插件如何运行并行任务 我是jenkins的初学者,我想使用管道插件在jenkins的可用从节点上并行启动一些任务。 我安装了管道插件并在下面的管道内联脚本部分中添加了。 注意:主节点和从站1是我的节点 理想情况下,第一分支和第二分支是什么???? 控制台输出: 由用户匿名[Pipeline]parallel[Pipele][firstBranch]{(Branch:firstBr

  • 我正在使用 Kubernetes 作为容器编排器构建一个微服务应用程序。该应用程序现已启动并运行,但我有其他问题。那是在我的服务中,我每天都有一个计划任务运行,当服务部署时,将运行多个服务实例(通过设置副本编号),创建多个同时运行的任务。我期望的是只有一个服务任务实例将运行,而不是多个实例。有什么技术可以处理这种情况吗? 库伯内特斯 Asp.net核心构建微服务 CI/CD的基岩实现 Fabrik

  • 问题内容: 我正在编写一个新的Jenkins管道,并具有一组最终要并行运行的步骤。但是,在开发此管道时,我想强制其顺序运行。我没有看到任何指定并行步骤使用的线程数或类似方法的方法。这是到目前为止的基本代码: 我希望能够依次运行这些Shell脚本而无需更改很多代码。 问题答案: 而不是您可以这样使用:

  • 本文向大家介绍Python中运行并行任务技巧,包括了Python中运行并行任务技巧的使用技巧和注意事项,需要的朋友参考一下 示例 标准线程多进程,生产者/消费者示例: Worker越多,问题越大 map Map能够处理集合按顺序遍历,最终将调用产生的结果保存在一个简单的集合当中。

  • 是否可以在gradle.properties文件中定义test.maxParallelForks=runtime.runtime.availableProcessors(),而不是在test任务下的每个build.gradle文件中定义它?

  • 问题内容: 我有以下使用类的课程。所以我想做的是,在运行cp1实例处理方法的同时,我要并行运行。 但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗?还是线程? 我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并