Время запуская скрипт Ruby отличается локально, чем по SSH

Я нахожусь на OSX, который подобен в установке. У меня есть стандартная учетная запись пользователя (давайте назовем ее JOHN) для ежедневного использования, таким образом, никакие права администратора. У меня есть вторая учетная запись с правами администратора. Мой ноутбук имеет один физический диск с двумя разделами. СИСТЕМНЫЙ раздел для ОС, ДАННЫЕ для всех пользовательских данных. Каждый раз, когда я должен переустановить, я могу вытереть СИСТЕМНЫЙ раздел, затем переустановить и воссоздать пользователя JOHN на СИСТЕМНОМ разделе. То же идет для администраторского пользователя.

Затем я вхожу в систему как администратор, перейдите к Пользователям / (/домой на Linux), переименуйте папку JOHN к JOHN1 и создайте символьную ссылку JOHN к ДАННЫМ/ПОЛЬЗОВАТЕЛЯМ/ДЖОНУ. Затем я выхожу из системы, вход в систему как пользователь JOHN, и все вернулось к нормальному. Я сохраняю администраторского пользователя на СИСТЕМНОМ разделе. Я не сохраняю данных там для хранения размера пользовательских данных по СИСТЕМНОМУ разделу максимально низко. Если ДАННЫЕ раздела испорчены, я могу все еще войти в систему.

В первый раз использование скопируйте папку ДЖОНА в раздел ДАННЫХ с надлежащими правами. Я использовал бы rsync для этого, поскольку это сохраняет все права как, они. После переустановки пользователь, возможно, получил новый системный идентификатор, таким образом, у Вас есть к показанному папка новому пользователю. На OSX это никогда не было проблемой. Я сделал это несколько раз теперь.

3
27.02.2014, 04:57
2 ответа

Это потому, что вы выводите все числа на экран через put . Затем они должны быть отправлены по SSH-соединению, что увеличивает время выполнения скриптов. Вывод также буферизуется локально, но эффекты не так заметны.

Вы можете подтвердить это, вместо этого выгрузив весь вывод в файл.

Примеры

локально на ноутбуке на экран

$ time ruby r.rb

real    0m19.474s
user    0m3.236s
sys     0m3.207s

локально на портативном компьютере в файл

$ time ruby r.rb >& rb_local.txt

real    0m0.785s
user    0m0.760s
sys     0m0.020s

SSH на рабочий стол на экран

$ time ruby r.rb
real    0m18.026s
user    0m4.118s
sys     0m3.815s

SSH на рабочий стол в файл

$ time ruby r.rb >& rb_remote.txt

real    0m3.942s
user    0m3.036s
sys     0m0.741s

Обычно это хорошая идея при написании таких сценариев вместо этого выгрузить содержимое в файл, а затем использовать такой инструмент, как tail , для периодического просмотра файла.

ПРИМЕЧАНИЕ: Нотация > & перенаправит как STDERR, так и STDOUT в файлы .txt . Однако вывод из времени по-прежнему будет отображаться на консоли. Это обозначение эквивалентно cmd> some_file.txt 2> & 1 .

3
27.01.2020, 21:14

Печать на консоли (особенно на удаленной консоли) - довольно дорогостоящая операция, если она выполняется в замкнутом цикле, который выполняется часто. Большая часть операций ввода-вывода Ruby является блокирующей, поэтому это резко замедляет выполнение программы.

Вы должны получить гораздо более разумный результат, если вместо этого отправите вывод в файл (или / dev / null , если вас это не волнует):

time ruby ./rubytest.rb >/dev/null
3
27.01.2020, 21:14

Теги

Похожие вопросы