【问题标题】:Are ActiveJobs methods instance or class methods?ActiveJobs 方法是实例方法还是类方法?
【发布时间】:2018-08-24 21:00:37
【问题描述】:

我有我的作业类,想知道是否可以定义一个辅助方法,使在一个任务中初始化的变量不会被运行该作业的下一个任务看到。

也就是说,下面的线程安全吗?

class OrdersUpdateJob < ActiveJob::Base

  def perform
    p my_method
  end

  def my_method
     @sth ||= 0
  end
end

【问题讨论】:

    标签: ruby-on-rails rails-activejob


    【解决方案1】:

    你有类方法和实例方法。与任何类一样,类方法定义以 self 开头。

    ActiveJob::Base.methods.select{|m| m == :perform}
    => []
    ActiveJob::Base.instance_methods.select{|m| m == :perform}
    => [:perform]
    

    基类上没有“perfom”方法,但实例方法上有一个 perfom 方法。

    我认为您要问的是作业是由类还是该类的实例运行。看到只有 instace_methods 包含 :perform,我想说 ActiveJobs 作为实例运行。所以你应该能够使用没有线程冲突的实例变量。

    【讨论】:

    • 谢谢!一个很好的比较:ActiveJob::Base.singleton_methods.sort.grep(/perform/) vs ActiveJob::Base.instance_methods.sort.grep(/perform/)
    猜你喜欢
    • 2016-01-28
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2018-07-26
    • 2015-11-25
    • 2011-05-19
    • 2017-07-07
    相关资源
    最近更新 更多