gpt4 book ai didi

multithreading - 如何使用Akka的 future 获得异步结果

转载 作者:行者123 更新时间:2023-12-03 12:52:37 26 4
gpt4 key购买 nike

我试图使用Akka框架同时写入多个文件,首先我创建了一个名为MyWriter的类,该类将写入文件,然后使用Future调用了该对象两次,希望为我创建2个文件,但是当我监视该文件时,在执行该程序时,它首先填充第一个文件,然后填充第二个文件(同步阻止)。

问:如何使代码在下面运行(无阻塞/异步)

import akka.actor._
import akka.dispatch._
import akka.pattern.ask
import akka.util.Timeout

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.concurrent.Future
import scala.concurrent.{ ExecutionContext, Promise }
import ExecutionContext.Implicits.global

class my_controler {

}

object Main extends App {

val system = ActorSystem("HelloSystem")
val myobj = system.actorOf(Props(new MyWriter), name = "myobj")
implicit val timeout = Timeout(50 seconds)
val future2 = Future { myobj ! save("lots of conentet") }
val future1 = Future { myobj ! save("event more lots of conentet") }

}

MyWriter代码:
case class save(startval: String)

class MyWriter extends Actor {
def receive = {
case save(startval) => save_to_file(startval)
}

有什么想法为什么代码不能同时执行?

最佳答案

为什么要用附加的?包装对Future的调用? Ask(?)无论如何都会返回一个Future,所以您在这里所做的就是将Future包裹在另一个Future周围,我不希望您这样做。

我看到的第二个问题是,您正在将两个消息发送到同一个actor实例,并且您希望它们并行运行。 Actor实例按顺序处理其邮箱。如果要同时进行处理,则需要FileWriter actor的两个实例来完成。如果仅此而已,那么只需启动另一个FileWriter实例并将其发送给第二条消息即可。

关于multithreading - 如何使用Akka的 future 获得异步结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com