【发布时间】:2020-01-31 17:56:39
【问题描述】:
我正在尝试学习 Scala 中的并发性,并使用 Scala 期货生成带有随机字符串的数据集。我想创建一个应用程序,它应该生成一个包含任意数量记录的文件并且它应该是可扩展的。
代码:
import java.util.concurrent.{ExecutorService, Executors}
import scala.util.{Failure, Random, Success}
import scala.concurrent.duration._
object datacreator {
implicit val ec: ExecutionContext = new ExecutionContext {
val threadPool: ExecutorService = Executors.newFixedThreadPool(4)
def execute(runnable: Runnable) {
threadPool.submit(runnable)
}
def reportFailure(t: Throwable) {}
}
def getRecord : String = {
"Random string"
}
def main(args: Array[String]): Unit = {
val filename = args(0)
val number_of_records = args(1)
val file_Object = new FileWriter(filename, true)
val data: Future[Iterable[String]] = Future {
for (i <- 1 to number_of_records.toInt)
yield getRecord
}
val result = data.map{
result => result.foreach(record => file_Object.write(record))
}
result.onComplete{
case Success(value) => {
println("Success")
file_Object.close()
}
case Failure(e) => e.printStackTrace()
}
}
}
我面临以下问题:
- 当我使用 SBT 运行程序时,它会将结果写入文件,但不会因进入无限模式而终止。
[info] Loading project definition from /Users/cw0155/PersonalProjects/datagen/project
[info] Loading settings for project datagen from build.sbt ...
[info] Set current project to datagenerator (in build file:/Users/cw0155/PersonalProjects/datagen/)
[info] running com.generator.DataGenerator xyz.csv 100
Success
| => datagen / Compile / runMain 255s
- 当我使用 Jar 运行程序时:
scala -cp target/scala-2.13/datagenerator_2.13-0.1.jar com.generator.DataGenerator "pqr.csv" "1000"
它正在等待无限时间并且不写入文件。
非常感谢任何帮助:)
【问题讨论】:
-
第一条线索:
result是什么类型? (即Future什么?) -
是的,它是Future[Unit]
标签: scala concurrency