Akka Stream - 源的并行处理?

时间:2016-11-01 00:09:22

标签: akka akka-stream

我想使用流来获取和处理多个资源。我有一个用户ID列表,我通过将ID映射到其他链接的迭代器来遍历列表。

到目前为止它运行良好,但是可以看到尽管使用mapAsyncUnordered - 流源同步处理,一个接一个。我想知道是否会发生这种情况是因为我使用FileIO.toPath作为接收器?或者我错过了什么?

代码非常简单:

import akka.stream._
import akka.stream.scaladsl._

implicit val system = ActorSystem("Local")
implicit val materializer = ActorMaterializer()

val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(Runtime.getRuntime.availableProcessors() * 4))

val src: Source[Int, NotUsed] = Source[Int](Conf.startId() to Conf.endId())

val flow = Flow[Int].mapAsyncUnordered(5)(userId ⇒ Future(LikesExtractor.extractUserList(userId))(ec))
  .collect {
    case Some(Likes(self, likes)) ⇒
      likes.zip(Iterator.continually(self))
  }.mapConcat(_.toList)
  .map {
    case ((liker, likee)) ⇒ ByteString(s"${likee.username},${liker.username}\n")
  }

val f = src via flow runWith FileIO.toPath(new File(Conf.basePath()).toPath)

import concurrent.duration._
Await.ready(f, 20 minute)

sys.exit(0)

xref akka-user

0 个答案:

没有答案