【问题标题】:How to save a Pharo image automatically every hour?如何每小时自动保存一张 Pharo 图像?
【发布时间】:2011-01-11 08:20:36
【问题描述】:

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

如何在图像中自动实现这一点?

我已经看到 Pier 项目这样做了。 但我不确定他们是怎么做到的。

TIA

【问题讨论】:

    标签: smalltalk pharo seaside projectpier


    【解决方案1】:

    Scheduler project on SqueakSource 看起来像 Smalltalk 的 cron。从概述:

    “启动一个新的任务调度程序并保留它”
    调度程序:= TaskScheduler 新。
    调度程序启动。
    “让我们每小时保存一次图像”
    调度器
       做:[Smalltalk 快照:真和退出:假]
       每:60 分钟。

    您可以将它与上面提到的阻塞代码或 OSProcess 的 saveImageInBackgroundNicely 结合起来,得到一个很好的简单解决方案。

    【讨论】:

    • 谢谢。调度程序工作得很好。我刚刚使用:do: [SmalltalkImage current snapshot: true andQuit: false.] 并且还让 smalltalk 以管理员身份运行,以便它可以保存文件。
    【解决方案2】:

    Result of a discussion on the mailing list, 加上一些糖霜,每小时运行一次:

    [[self blockUI.
      self doUpdate.
      SmalltalkImage current snapshot: true andQuit: false.
      self unblockUI.
      (Delay forDuration: (Duration hours: 1)) wait] repeat] fork
    

    【讨论】:

    • 再往下that same thread 还提到了来自 OSProcessUnixProcess saveImageInBackgroundNicely,它可以使用后台 Unix 进程保存图像。如果您不希望图像每小时都被阻止,您可能更喜欢使用它。
    • 嗯。我在 Pharo 1.1.1 中找不到名为 saveImageInBackgroundNicely 的方法。既不是类 UnixProcess。我想知道那里发生了什么。
    • 该类来自OSProcess,它不包含在基础 Pharo 中。
    • 嗨@nes1983 谢谢你这保存了图像。你如何让它每小时保存一次?
    • 请注意,Timespan 有一个名为“every:do:”的方法,虽然名字很有趣,但它并没有达到您的预期。它根本不等待。
    【解决方案3】:

    你可以做到,它可能工作得很好。

    但我不会这样做。

    不支持生产中的持久性。

    为什么?

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

    从长远来看,某些状态会出现一些无法解释的问题,这会使事情复杂化,您需要进行硬重启。

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

    在 smalltalk 中硬重启意味着您必须拍摄新的图像并再次加载所有代码(它可以是自动化的,但经验表明这可能很耗时)。

    【讨论】:

    • +1 表示提出此观点,但我不同意。基于图像的持久性可以成功使用。我认为甚至 Dabble DB 都依赖它(每个客户使用一张图片)。在复杂的对象图中识别某些问题可能比基于模式的数据库更难,Squeak 本身只能处理这么多的数据,但它都是关于权衡的。
    • 另外,为了在图像中进行合理的持久化,您需要灵活处理事务。如果服务器(或虚拟机)在保存之前因任何原因宕机,将会受到伤害。并非所有应用程序都可以享受不被 ACID 的奢侈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多