Ферма серверов и / или другие решения для быстрого запуска сценария ruby

У меня есть скрипт ruby, который займёт около 5 часов, чтобы перебрать мой rmbp. Проблема: нам нужно в течение 2 часов.

Запускаемый код не является потокобезопасным и выдает файл csv из входных данных xlsx.... Я никогда раньше не использовал серверные фермы, но я полагаю, что не-потокобезопасный рубин - не совсем их вещь (?)

Короче говоря, есть ли какая-либо ферма серверов или служба или каким-либо образом я могу создать сценарий ruby, который занимает 5 часов менее чем за час или два?

1 ответ

Решение

Я сделал нечто подобное, используя Heroku и Sidekiq. Heroku предоставляет как бесплатные, так и мини-планы для недорогих вычислений, а самоцвет Sidekiq позволяет разделить вашу работу между несколькими работниками, позволяя им работать одновременно и, таким образом, быстрее заканчивать работу.

Вы знаете, где ваше узкое место? Это ввод файла XLSX или вывод в CSV? Если это последнее, внесите свой файл XLSV и передайте его кусочкам работникам Sidekiq.

Например, вы можете разбить ваш файл XLSX на куски по 1000 строк, а затем

rows.each do |row|
  MySidekiqWorker.perform_async(row)
end

И ваш MySidekiqWorker может выглядеть так:

class MySidekiqWorker
  include Sidekiq::Worker

  def perform(row)
    # append processed data to CSV
  end
end

Ваши работники делают всю тяжелую работу и почти наверняка будут быстрее, чем ваш ноутбук без такой помощи.

Другие вопросы по тегам