Как выполнить операцию в scala с тайм-аутом?

Контекст: я хочу написать быстрое задание (hadoop) для сканирования страниц, и я хочу установить тайм-аут для извлечения URL-адреса (без тайм-аута для URLConnection, я хочу общее решение для других случаев тайм-аута), то есть функцию карты.

Я думаю о фьючерсах, которые убиваются после некоторого тайм-аута со всеми высвобожденными ресурсами, поскольку это критический код памяти. Не уверен, что использовать в scala API.


person yura    schedule 15.06.2012    source источник
comment
Вы можете использовать фьючерсы akka, но они выдают исключение по тайм-ауту, что может быть, а может и не быть тем, что вы ищете doc.akka.io/docs/akka/2.0.1/scala/futures.html   -  person Noah    schedule 16.06.2012
comment
Я бы предпочел построить API-интерфейс scala, поскольку любая новая зависимость — это боль в банке Hadoop.   -  person yura    schedule 16.06.2012
comment
Это не дубликат, но я задал аналогичный вопрос: stackoverflow.com/questions /7651293/computation-with-time-limit Возможно, один из ответов вам поможет.   -  person paradigmatic    schedule 16.06.2012


Ответы (1)


В то время как Akka был предложен — и превосходит следующее решение — у Scala есть собственная встроенная модель Актера, очень похожая на Akka, которая может делать то, что вы хотите. Примеры можно найти здесь:

http://www.scala-lang.org/node/242

Вы, вероятно, захотите использовать reactWithin или receiveWithin, документацию по которым можно найти здесь:

http://www.scala-lang.org/api/current/scala/actors/TIMEOUT%24.html

person Jeff Van Vranken    schedule 19.06.2012