Size: a a a

Scala User Group

2020 August 14

BK

Boris V. Kuznetsov in Scala User Group
Vλadimir
Зио тут причем 😱
ForeachPar в условии
источник

V

Vλadimir in Scala User Group
Boris V. Kuznetsov
ForeachPar в условии
Он только там есть?
источник

IP

Ilya Petrov in Scala User Group
Oleg ℕizhnik
Что более высокоуровневое вы хотите
Да, может слишком много хочу
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ilya Petrov
Хочу замутить такую штуку: один файбер вычитывает очередь заданий и запускает параллельно k штук. Но таски все не одинаково "толстые" поэтому foreachPar не оч подходит. Хотел узнать если какая-то апишка/механизм, чтобы с этим работать в виде похожем на то, как это выглядит при работе с мультиплексированным вводом-выводом (epoll). Т.е. чтобы можно было запустить до k тасков и залипать в  каком-то вызове, пока одна из тасок не закончится и т д
https://github.com/TinkoffCreditSystems/tofu/blob/master/concurrent/src/main/scala/tofu/concurrent/syntax/traverse.scala#L14
когда-то Кирилл это писал, потом в котах появился такой же
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ilya Petrov
Хочу замутить такую штуку: один файбер вычитывает очередь заданий и запускает параллельно k штук. Но таски все не одинаково "толстые" поэтому foreachPar не оч подходит. Хотел узнать если какая-то апишка/механизм, чтобы с этим работать в виде похожем на то, как это выглядит при работе с мультиплексированным вводом-выводом (epoll). Т.е. чтобы можно было запустить до k тасков и залипать в  каком-то вызове, пока одна из тасок не закончится и т д
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Вот прямо для вас сделано
источник

IP

Ilya Petrov in Scala User Group
Спасибо смотрю...
источник

IP

Ilya Petrov in Scala User Group
Но это больше выглядит как ForeachPar только бачами
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Это не батчпми
источник

IP

Ilya Petrov in Scala User Group
Значит я сходу плохо понял, смотрю более пристально
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Это контроль, что одновременно запущенно не больше k.
Таска выполнилась - начинает выполняться следующая
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И так пока не закончатся
источник

IP

Ilya Petrov in Scala User Group
Oleg ℕizhnik
И так пока не закончатся
Просто мне хотелось бы после того как закончится очередная таска в ручном режиме брать следующую и смотреть на неё и может быть отбрасывать, а может быть запускать. Т.е. нужна возможность заложить логику при завершении каждой из тасок
источник

D

Denis in Scala User Group
Aleksei Shashev
один стрим читает, то что он читает распихивается по k стримам, результат их работы сливается в один стрим. Соответственно если все рабочие стримы заняты, то backpressure будет притормаживать "читающий" стрим.
Распихивать по k стримам вроде удобно на акторах.  Я как-то писал штуку, которая должна была выкачать сайт - первую страницу и рекурсивно все переходы. Переходы я как-то выцепил отдельно, в итоге был огромный массив ссылок. Вот этот массив я раздавал акторам и так выкачивал.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ilya Petrov
Просто мне хотелось бы после того как закончится очередная таска в ручном режиме брать следующую и смотреть на неё и может быть отбрасывать, а может быть запускать. Т.е. нужна возможность заложить логику при завершении каждой из тасок
Ну вот у вас функция в травёрс передаётся
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Берёте значение своего типа данных, описывающего таску, и если не подходит - сразу завершаете
источник

g

gipeshka in Scala User Group
Ilya Petrov
Просто мне хотелось бы после того как закончится очередная таска в ручном режиме брать следующую и смотреть на неё и может быть отбрасывать, а может быть запускать. Т.е. нужна возможность заложить логику при завершении каждой из тасок
У семафора можно запрашивать больше, чем один. Семафор - суммарный разрешенный вес, если знаешь вес пришедшей таски - запрашиваешь сколько надо.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ilya Petrov
Просто мне хотелось бы после того как закончится очередная таска в ручном режиме брать следующую и смотреть на неё и может быть отбрасывать, а может быть запускать. Т.е. нужна возможность заложить логику при завершении каждой из тасок
Чем вам функция то не подходит под "взять посмотреть?"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
elems.parTraverseN(n)(taska =>
 rabotat(taska).whenA ( podhodit(taska))
источник

AS

Aleksei Shashev in Scala User Group
Denis
Распихивать по k стримам вроде удобно на акторах.  Я как-то писал штуку, которая должна была выкачать сайт - первую страницу и рекурсивно все переходы. Переходы я как-то выцепил отдельно, в итоге был огромный массив ссылок. Вот этот массив я раздавал акторам и так выкачивал.
да, на акторах это легко строится :)
источник