私はsPdf's run methodを使ってHTMLをPDFファイルとしてレンダリングしています。scala.sys.process.ProcessBuilderの同時実行
run
はscala.sys.process.ProcessBuilder
を使用し、それが!
方法です:
/** Starts the process represented by this builder, blocks until it exits, and
* returns the exit code. Standard output and error are sent to the console.
*/
def ! : Int
私のコントローラは、他のすべての暫定実行を非同期に変換を実行するためにFuture
を使用しますがないSPDFブロックされますか?あなたの答えPaulため
Future { pdf.run(sourceUrl, outputStream) } map { exitCode =>
outputSteam.toByteArray
}
UPDATE
おかげで少しテストを行なったし、私はそうのようなSPDFの実行を更新した場合ええ、その方法:)
になりそうだ。
def run[A, B](sourceDocument: A, destinationDocument: B)(implicit sourceDocumentLike: SourceDocumentLike[A], destinationDocumentLike: DestinationDocumentLike[B]): Int = {
println("start/ " + System.currentTimeMillis)
< ... code removed ... >
val result = (sink compose source)(process).!
println("finish/ " + System.currentTimeMillis)
result
}
と私は3つの連続した要求を実行しますstdoutのプリント
start 1461288779013
start 1461288779014
start 1461288779014
finish 1461288781018
finish 1461288781020
finish 1461288781020
非同期実行のようです。
'ProcessBuilder'は他のシステムスレッドではなく実行スレッドをブロックしますが、実際の答えは' spdf'の仕組みによって異なります。一度に複数のプロセスを起動させると、ブロックする必要はありません。 – jkinkead