Я хочу автоматически сохранять свое изображение Pharo каждый час.
Как бы вы сделали это автоматически внутри изображения?
Я видел, как это делает проект Pier. Но я не уверен, как они это делают.
ТИА
Я хочу автоматически сохранять свое изображение Pharo каждый час.
Как бы вы сделали это автоматически внутри изображения?
Я видел, как это делает проект Pier. Но я не уверен, как они это делают.
ТИА
На SqueakSource есть проект Scheduler, который выглядит как cron для Smalltalk. Из обзора:
"Start a new task scheduler and keep it around" scheduler := TaskScheduler new. scheduler start. "Let's save the image every hour" scheduler do: [Smalltalk snapshot: true andQuit: false] every: 60 minutes.
Вы можете объединить это с кодом блокировки или saveImageInBackgroundNicely OSProcess, упомянутым выше, и получить хорошее простое решение.
Результат обсуждения в списке рассылки, с некоторой обледенением, чтобы запускать его только ежечасно:
[[self blockUI.
self doUpdate.
SmalltalkImage current snapshot: true andQuit: false.
self unblockUI.
(Delay forDuration: (Duration hours: 1)) wait] repeat] fork
UnixProcess saveImageInBackgroundNicely
из OSProcess, который может сохранять изображение с помощью фонового процесса Unix. Вы можете предпочесть использовать это, если не хотите, чтобы изображение блокировалось каждый час.
- person Alex Jasmin; 11.01.2011
Вы можете сделать это, и это может работать просто отлично.
Но я бы не стал этого делать.
Не для настойчивости в производстве.
Почему?
Потому что изображения похожи на ваш сеанс на вашем ноутбуке. Сохранение вашего изображения похоже на перевод вашего ноутбука в спящий режим: оно сохраняет все.
А в долгосрочной перспективе в каком-то штате будет какая-то необъяснимая хрень, которая может что-то усложнить и нужно будет делать хард ребут.
Попытки быть перфекционистом в этом не помогают (или, может быть, помогают, но уж точно неэкономичны). Это просто произойдет, и перезагрузка вашего ноутбука — дешевое решение для получения свежего состояния. Но это для вашего приложения smalltalk может быть не таким дешевым.
Жесткая перезагрузка в smalltalk будет означать, что вам нужно взять новый образ и снова загрузить весь свой код (это можно автоматизировать, но опыт подсказывает, что это может занять много времени).