Size: a a a

Saint P Ruby Community

2020 September 23

AG

Alexander G in Saint P Ruby Community
это вам не руби выучить )
источник

ME

Makar Ermokhin in Saint P Ruby Community
Давайте помечтаем когда уже будет оффлайн конфа
источник

AD

Anton Davydov in Saint P Ruby Community
Alexander G
Я вчера собрался помыть гору посуды и посмотреть/послушать что-то интересное.
Но вот проблема - не нашел ничего "прикладного" что ли.

Вроде все полезное, а чувак на природе вообще красавчик. Но хочется какой-то руби-попсы )
Там вроде про асинхронность прикладной доклад
источник

AD

Anton Davydov in Saint P Ruby Community
Или я тебя не очень понял
источник

AG

Alexander G in Saint P Ruby Community
я, может, его пропустил.Помню, что попадалось что-то со словом async, а сейчас вижу только про async opal
Но это точно не оно
источник

VD

Vla Dem in Saint P Ruby Community
Anton Davydov
Там вроде про асинхронность прикладной доклад
Да ладно, че там прикладного? Там пока мечты и фантазии
источник

AG

Alexander G in Saint P Ruby Community
кстати, на счет этого. Кто-то может подсказать, что проще всего заюзать в скриптах, когда хочется распараллелить задачи.

Мне недавно надо было поработать с api twilio, вытащить кучу данных для кучи пользователей и обновить базу.
rest апишка у твилио не сильно быстро работает.

Я думал найти какую-то готовую очередь с пулом, чтобы выполнить N задач в X потоков.
Но вот прям "однострочника" не нашел.

Сделал как-то так

pool = Concurrent::FixedThreadPool.new(4)
data = Concurrent::Hash.new

ar_relation.find_each |r|
 pool.post do
   process(r, data) # writes to data[r.id]
 end
end


Но по пулу не понять, что закончилось там все или нет.
Поэтому еще пришлось проверять в цикле, пока data.size не станет == ar_relation.size
А потом уже выходить.

При этом внутри тредов иногда что-то могло упасть и data.size никогда не становился равным ar_relation.size
Есть что-то, что работает параллельно(конкурентно) и умеет отслеживать, выполнились ли все задачи из очереди?

Или надо было просто добавить сюда рубишную очередь? Queue
источник

VD

Vla Dem in Saint P Ruby Community
Но это Kaigi — конференция про развитие языка, не про суровые будни разработчиков
источник

IT

Ivan Takarlikov in Saint P Ruby Community
Alexander G
кстати, на счет этого. Кто-то может подсказать, что проще всего заюзать в скриптах, когда хочется распараллелить задачи.

Мне недавно надо было поработать с api twilio, вытащить кучу данных для кучи пользователей и обновить базу.
rest апишка у твилио не сильно быстро работает.

Я думал найти какую-то готовую очередь с пулом, чтобы выполнить N задач в X потоков.
Но вот прям "однострочника" не нашел.

Сделал как-то так

pool = Concurrent::FixedThreadPool.new(4)
data = Concurrent::Hash.new

ar_relation.find_each |r|
 pool.post do
   process(r, data) # writes to data[r.id]
 end
end


Но по пулу не понять, что закончилось там все или нет.
Поэтому еще пришлось проверять в цикле, пока data.size не станет == ar_relation.size
А потом уже выходить.

При этом внутри тредов иногда что-то могло упасть и data.size никогда не становился равным ar_relation.size
Есть что-то, что работает параллельно(конкурентно) и умеет отслеживать, выполнились ли все задачи из очереди?

Или надо было просто добавить сюда рубишную очередь? Queue
Concurrent::Future.execute я вот ето узнал
источник

IT

Ivan Takarlikov in Saint P Ruby Community
ты в массив собираешь futures
источник

IT

Ivan Takarlikov in Saint P Ruby Community
потом резолвишь
источник

IT

Ivan Takarlikov in Saint P Ruby Community
и у тебя массив с данными на выходе
источник

AG

Alexander G in Saint P Ruby Community
Alexander G
кстати, на счет этого. Кто-то может подсказать, что проще всего заюзать в скриптах, когда хочется распараллелить задачи.

Мне недавно надо было поработать с api twilio, вытащить кучу данных для кучи пользователей и обновить базу.
rest апишка у твилио не сильно быстро работает.

Я думал найти какую-то готовую очередь с пулом, чтобы выполнить N задач в X потоков.
Но вот прям "однострочника" не нашел.

Сделал как-то так

pool = Concurrent::FixedThreadPool.new(4)
data = Concurrent::Hash.new

ar_relation.find_each |r|
 pool.post do
   process(r, data) # writes to data[r.id]
 end
end


Но по пулу не понять, что закончилось там все или нет.
Поэтому еще пришлось проверять в цикле, пока data.size не станет == ar_relation.size
А потом уже выходить.

При этом внутри тредов иногда что-то могло упасть и data.size никогда не становился равным ar_relation.size
Есть что-то, что работает параллельно(конкурентно) и умеет отслеживать, выполнились ли все задачи из очереди?

Или надо было просто добавить сюда рубишную очередь? Queue
если коротко, то надо сходить 10к раз по http и обновить базу (потом). Хотелось ускорить. Желательно в одну-две строки )
источник

IT

Ivan Takarlikov in Saint P Ruby Community
источник

IT

Ivan Takarlikov in Saint P Ruby Community
тоже задача была сходить много раз в хттп
источник

IT

Ivan Takarlikov in Saint P Ruby Community
и данные отдать
источник

AG

Alexander G in Saint P Ruby Community
да, последний кусочек кода выглядит примерно тем, что нужно. спасибо
источник

w

wi11son in Saint P Ruby Community
Alexander G
Я вчера собрался помыть гору посуды и посмотреть/послушать что-то интересное.
Но вот проблема - не нашел ничего "прикладного" что ли.

Вроде все полезное, а чувак на природе вообще красавчик. Но хочется какой-то руби-попсы )
А давай ты сделаешь нам доклад, и никакая Бразилия для этого теперь не преграда
источник

AD

Anton Davydov in Saint P Ruby Community
Vla Dem
Да ладно, че там прикладного? Там пока мечты и фантазии
Там вроде часть уже померджили, так что можно поиграть
источник

AG

Alexander G in Saint P Ruby Community
wi11son
А давай ты сделаешь нам доклад, и никакая Бразилия для этого теперь не преграда
почему я и почему Бразилия? )
источник