Как запустить несколько граблей параллельно с ruby script
У меня есть ruby script, из которого я хочу запустить четыре рейк-задачи для параллельной работы.
Как мне это сделать? Я думаю, мне нужно будет вилка и отсоединить процесс, но мне нужен точный синтаксис.
Ответы
Ответ 1
Лучше, если вы разрешите Rake обрабатывать parallelism. Вы можете сделать это, используя "многозадачность". Внутри Rakefile:
desc "Start everything."
multitask :start => [ 'mongodb:start', 'haystack:start' ]
Фон и источник.
В противном случае, полагая, что вы делаете это из-за пределов Rakefile, вы можете использовать такой ужасный код, который бы не выдавал исключений, как вы могли ожидать, и может легко потерпеть неудачу несколькими способами:
require 'rake'
load 'Rakefile'
def invoke(name)
Thread.new do
puts Rake::application[name].invoke
end
end
invoke :make_coffee
invoke :boil_eggs
invoke :empty_trash
(так что не делайте этого)
Ответ 2
использовать https://github.com/grosser/parallel
Parallel.each(data,: in_processes = > 4) {| x | ruby_function (x)}
Ответ 3
Вы можете попробовать использовать Multithreading
:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_threads.html
также было обсуждение SO:
Выполнение нескольких исходных параллельных заданий с помощью Rails
Ответ 4
make имеет аналогичную функцию (-j), которая позволяет запускать несколько задач параллельно.
существует запрос на растяжение, чтобы эта функция была доступна в rake:
https://github.com/jimweirich/rake/pull/113
и вилка рейка с -j реализована:
https://github.com/quix/rake