Как запустить несколько граблей параллельно из сценария ruby - PullRequest
10 голосов
/ 09 апреля 2011

У меня есть скрипт ruby, из которого я хочу запустить 4 рейк-задачи для параллельного запуска.

Как мне это сделать?Я думаю, что мне нужно Форк и отсоединить процесс, но мне нужен точный синтаксис.

Ответы [ 4 ]

16 голосов
/ 09 апреля 2011

Лучше, если вы позволите Рэйку справиться с параллелизмом.Вы можете сделать это с помощью «многозадачности».Внутри Rake-файла:

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

(так что не делайте этого)

3 голосов
/ 18 октября 2012

использование https://github.com/grosser/parallel

Parallel.each (data,: in_processes => 4) {| x | ruby_function (x)}

1 голос
/ 23 августа 2012

make имеет похожую функцию (-j), которая позволяет вам запускать несколько задач параллельно.

есть открытый запрос, чтобы эта функция была доступна в рейке: https://github.com/jimweirich/rake/pull/113

и вилка граблей с -j реализована: https://github.com/quix/rake

1 голос
/ 09 апреля 2011

Вы можете попробовать использовать Multithreading:

http://www.ruby -doc.org / документы / ProgrammingRuby / html / tut_threads.html

также здесь было обсуждение SO:

Запуск нескольких параллельных фоновых заданий с Rails

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...