Smalltalk 如何每小时自动保存一张Pharo图像?

Smalltalk 如何每小时自动保存一张Pharo图像?,smalltalk,pharo,seaside,projectpier,Smalltalk,Pharo,Seaside,Projectpier,我想每小时自动保存我的Pharo图像 如何在图像中自动执行此操作 我见过码头项目这样做。 但我不知道他们是怎么做到的 TIA周围结冰,仅每小时运行一次: [[self blockUI. self doUpdate. SmalltalkImage current snapshot: true andQuit: false. self unblockUI. (Delay forDuration: (Duration hours: 1)) wait] repeat] fork 有一个

我想每小时自动保存我的Pharo图像

如何在图像中自动执行此操作

我见过码头项目这样做。 但我不知道他们是怎么做到的

TIA

周围结冰,仅每小时运行一次:

[[self blockUI.
  self doUpdate.
  SmalltalkImage current snapshot: true andQuit: false.
  self unblockUI.
  (Delay forDuration: (Duration hours: 1)) wait] repeat] fork
有一个类似Smalltalk的cron。从概述中可以看出:

“启动一个新的任务计划程序并保持其正常运行” 调度程序:=任务调度程序新建。 调度程序启动。 “让我们每小时保存一次图像” 调度程序 do:[Smalltalk快照:true和退出:false] 每小时:60分钟。
您可以将其与上面提到的阻塞代码或OSProcess的SaveImageInBackground很好地结合起来,得到一个很好的简单解决方案。

您可以做到这一点,它可能工作得很好

但我不会这么做

在生产过程中没有持续性

为什么?

因为图像就像笔记本电脑中的会话。保存您的图像就像让您的笔记本电脑进入睡眠状态:它可以保存所有内容

从长远来看,一些州会出现一些无法解释的问题,这会使事情变得复杂,你需要重新启动

尝试完美主义是没有帮助的(或者可能有,但肯定不经济)。它会发生的,重新启动你的笔记本电脑是拥有新状态的廉价解决方案。但是,对于你的smalltalk应用程序来说,这可能没有那么便宜


smalltalk中的硬重启将意味着您必须获取一个新的映像,然后重新加载所有代码(可以自动加载,但经验表明这可能会很耗时)。

更进一步,还提到了OSProcess中的
UnixProcess saveimageinbackgroundwelly
,它可以使用后台Unix进程保存映像。如果你不想让图像每小时都阻塞一次,你可能更喜欢使用这个。我在Pharo 1.1.1中找不到名为saveImageInBackgroundWelly的方法。两个类都不是UnixProcess。我想知道那里发生了什么。这个类不包括在基础Pharo中。嗨@nes1983谢谢这保存了图像。如何让它节省每小时?请注意,Timespan有一个名为“every:do:”的方法,虽然这个名称很有趣,但它并没有达到您所期望的效果。不用等了,谢谢。调度器工作得很好。我刚刚使用了:do:[SmalltalkImage当前快照:true和quit:false.]并使smalltalk作为管理员运行,以便它可以保存文件。+1用于显示此视图,但我不同意。可以成功地使用基于图像的持久性。我认为Dabble DB也依赖它(每个客户使用一张图片)。与基于模式的数据库相比,在复杂的对象图中识别某些问题可能更难,Squeak本身只能处理这么多数据,但这都是权衡问题。此外,要在图像中实现合理的持久性,您需要灵活处理事务。如果服务器(或虚拟机)在保存之前因任何原因停机,则会造成伤害。并不是所有的应用都能享受不含酸的奢侈。 "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.