并行运行两个scala函数,5分钟后返回最新值

标记

我有两个Scala函数,运行起来很昂贵。每个变量都如下所示,它们开始提高变量的值,我想在5分钟(或其他时间)之后同时运行它们。我想终止这两个功能,并取其到那时的最新价值。

def func1(n: Int): Double = {
   var a = 0.0D
   while (not terminated) {
       /// improve value of 'a' with algorithm 1 
   }
}

def func2(n: Int): Double = {
   var a = 0.0D
   while (not terminated) {
       /// improve value of 'a' with algorithm 2 
   }
}

我想知道我应该如何构造我的代码,以及什么是最佳实践?我正在考虑在两个具有超时的不同线程中运行它们,并在超时时返回它们的最新值。但是似乎还有其他方法可以做到这一点。我是Scala的新手,所以任何见解都将大有帮助。

亚历克斯·帕卡(Alex Pakka)

不难。这是一种实现方法:

  @volatile var terminated = false

  def func1(n: Int): Double = {
    var a = 0.0D
    while (!terminated) {
      a = 0.0001 + a * 0.99999; //some useless formula1
    }
    a
  }

  def func2(n: Int): Double = {
    var a = 0.0D
    while (!terminated) {
      a += 0.0001  //much simpler formula2, just for testing
    }
    a
  }


  def main(args: Array[String]): Unit = {

    val f1 = Future { func1(1) } //work starts here

    val f2 = Future { func2(2) } //and here

    //aggregate results into one common future
    val aggregatedFuture = for{
      f1Result <- f1
      f2Result <- f2
    } yield (f1Result, f2Result)

    Thread.sleep(500) //wait here for some calculations in ms
    terminated = true //this is where we actually command to stop

    //since looping to while() takes time, we need to wait for results
    val res = Await.result(aggregatedFuture, 50.millis)
    //just a printout
    println("results:" + res)

 }

但是,当然,您可能希望查看while循环并创建更可管理和可链接的计算。

输出: results:(9.999999999933387,31206.34691883926)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala-并行运行两个功能

来自分类Dev

在 pathos 中并行运行两个函数

来自分类Dev

每隔5分钟交替调用两个方法。

来自分类Dev

给定两个线程并行运行时,变量的可能值是多少?

来自分类Dev

启动后5分钟运行脚本

来自分类Dev

如何使两个Spark RDD并行运行

来自分类Dev

如何并行运行两个线程?

来自分类Dev

两个并行运行的ncurses窗口

来自分类Dev

Ansible-并行运行两个任务

来自分类Dev

Javascript并行运行两个循环

来自分类Dev

并行运行两个git命令

来自分类Dev

在 iOS Swift 中并行运行两个循环

来自分类Dev

JMeter:如何在第一个线程完成后并行运行两个线程

来自分类Dev

Xamarin / C#在后台线程(非UI)上以不同的返回类型并行运行两个任务

来自分类Dev

使用celery-beat完成上一个任务后5分钟内如何运行任务?

来自分类Dev

5分钟后无声音

来自分类Dev

仅运行setInterval 5分钟?

来自分类Dev

当一个函数从另一个函数收集数据时,如何在 python 中并行运行两个函数?

来自分类Dev

重新启动系统后5或10分钟后运行脚本文件

来自分类Dev

管道输出与另一个程序并行运行的两个程序

来自分类Dev

Oracle查询以获取两个时间戳之间的每一分钟

来自分类Dev

在10分钟的片中分割最后两个小时

来自分类Dev

计算两个日期时间之间15分钟的序列发生

来自分类Dev

如何计算两个日期之间30分钟的间隔?

来自分类Dev

MySQL使用两个时间戳在15分钟内找到记录

来自分类Dev

每次运行后20分钟运行线程

来自分类Dev

运行5分钟后,我的libgdx游戏崩溃并变成黑色

来自分类Dev

高IOPS运行5分钟后,Cassandra抛出NoHostAvailableException

来自分类Dev

在Asp.Net中并行运行两个版本的同一Dll

Related 相关文章

热门标签

归档