Это лучше если вы позволите Рейку справиться с параллелизмом. Вы можете сделать это, используя «многозадачность». Внутри Rakefile:
desc "Start everything."
multitask :start => [ 'mongodb:start', 'haystack:start' ]
Background and source.
В противном случае, предполагая, что вы делаете это из-за пределов 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
(так что не делайте этого)
Мне действительно не нравится это как решение. Это работает отлично, пока эта конкретная точка входа используется для запуска сборки; однако, просто побить мертвую лошадь (опция «-j»): с помощью «make» я могу выбрать любую цель, которую я хочу (например, дать явный путь для конкретной библиотеки, которая будет построена, в отличие от указания одного из удобностей цели, добавленные разработчиком сборки) ... пока я поставлю параметр '-j', он строит параллельно. Похоже, что это конкретное решение будет работать только до тех пор, пока у вас есть что-то на месте, чтобы использовать «многозадачность» в любом месте, где это может быть необходимо. –
@BrianVandenberg проверяет параметр командной строки '--multitask', он делает так, что все задачи рассматриваются как многозадачные. –