запуск "rubything.rb" в каждом цикле - PullRequest
1 голос
/ 28 ноября 2009

есть проблема с этим? будет ли какое-то ограничение на ресурсы?

#main.rb
(1..100000).each do |loop|

`ruby dosomething.rb`

end

Причина, по которой я это делаю, заключается в том, что main.rb должен быть запущен в Jruby.

Somescript.rb работает быстрее, используя меньше ресурсов только в Ruby, поэтому я запускаю его как команду оболочки.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2009

Таким образом, запуск процесса ruby, синтаксический анализ сценария, его выполнение и выход из 100 000 раз быстрее, чем импорт сценария в цикл под JRuby? Что ж, хорошо, если вы это измерили, то в том, что вы делаете, не так уж много неправильного. Но если вы только что измерили запуск скрипта один раз в JRuby и один раз в ruby ​​(или, может быть, в среднем 5 запусков, а не в циклах по 100 000 раз), то вполне вероятно, что вы делаете что-то не так, потому что вы частично сравнили время запуска JRuby и время запуска ruby, которое не будет справедливым сравнением, так как вы должны запустить JRuby, а затем ruby ​​в том, что вы на самом деле написали.

Из ваших комментариев кажется, что у вас проблемы с очисткой памяти, используемой при каждом запуске при запуске в JRuby. В этом случае вы можете попробовать выполнить цикл во внешнем рубине, если он правильно обрабатывает память, это лучше, чем запуск рубина 100 000 раз.

#main.rb
`ruby dosomething.rb`
----
#dosomething.rb
(1..100000).each do |loop|
doingSomething
end
0 голосов
/ 28 ноября 2009

В этом не так много «неправильного». Это не лучший способ обойти ошибку памяти, и я боюсь за среду, в которой вы должны развернуться. Если вам нужно работать в JRuby, похоже, это потому, что ваш системный администратор не хочет, чтобы на нем была установлена ​​сборка Ruby MRI, поэтому требование его запуска является странным.

Но да, если это работает, это работает. Я бы поговорил с вашим сисадмином и убедился в том, что это здорово - использовать MRI и JRuby.

...