【问题标题】:Getting the runtime of a delayed job in rails?在 Rails 中获取延迟作业的运行时间?
【发布时间】:2012-01-03 02:46:07
【问题描述】:

我有一个延迟的作业正在运行,我想在它完成时保存运行时,工作人员将运行时记录到这样的日志中......

XXXXXJob completed after 1.6372

我想知道您如何从延迟作业类中访问此统计信息?

我试过 self.runtime 但这会引发错误。

干杯。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 runtime delayed-job


    【解决方案1】:

    恐怕delayed_job gem 不提供用于访问该统计信息的 API。看起来here 是他们计算运行时间的地方,这就是那里发生的事情:

    runtime = Benchmark.realtime do
      invoke_job
      destroy
    end
    logger.info "* [JOB] #{name} completed after %.4f" % runtime
    

    所以runtime 是使用Benchmark 模块计算并记录下来的,但它不会存储在任何地方以供以后使用。

    尽管如此,您仍然可以自己计算作业的运行时间,方法是使用类似的 Benchmark.realtime 调用或类似的方法包装其逻辑。

    【讨论】:

    • 另一种选择是打开类并通过覆盖 run 方法来改变行为。
    • 是的,重开类可以解决大部分像ruby这样的问题。但这是最大的解决方案,如果可能的话,我最好避免它。即使您需要为应用中的每个后台作业计时,您也可以创建自己的 BaseJob 类,实现所需的逻辑并从该类派生所有作业。
    • 将作业包装在基准测试中效果很好,dj 记录的时间与基准测试结果相匹配。如果它需要更多地重复使用,我会创建它自己的基础工作,但它可以一次性完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2012-08-16
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多