У меня есть экземпляры дела класса Thing
, и у меня есть куча запросов для запуска, которые возвращают коллекцию Thing
с так:Scala - Пакетный поток из Futures
def queries: Seq[Future[Seq[Thing]]]
мне нужно собрать все Thing
s из всех фьючерсов (как и выше) и группировать их в коллекцию одинакового размера в 10 000, чтобы они могли быть сериализованы в файлы размером 10 000 Thing
.
def serializeThings(Seq[Thing]): Future[Unit]
Я хочу, чтобы быть реализован таким образом, что я не ждать всех запросов скороходов сериализации. Как только 10 000 Thing
s возвращаются после завершения фьючерсов первых запросов, я хочу начать сериализацию.
Если я что-то вроде:
Future.sequence(queries)
Он будет собирать результаты всех запросов, но я понимаю, что такие операции, как map
не будет вызываться, пока все запросы полные и все Thing
s должны сразу вписывается в память.
Каков наилучший способ реализации объединенного потокового конвейера с использованием коллекций Scala и параллельных библиотек?
Если вы хотите обработать N фьючерсов в партиях 10 000, это может помочь (это http://stackoverflow.com/a/38255964/4496364). Кроме того, у Джеймса Уорда есть сообщение с болгом (здесь) (https://www.jamesward.com/2016/06/16/reactive-web-request-batching-with-scala-and-play-framework/). –
@ insan-e Я не хочу покупать фьючерсы. Я хочу выставить результаты фьючерсов, которые каждое будущее возвращает произвольное количество 'Thing' – Samuel