ActiveJobs 方法是实例还是 class 方法?

Are ActiveJobs methods instance or class methods?

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

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

class OrdersUpdateJob < ActiveJob::Base

  def perform
    p my_method
  end

  def my_method
     @sth ||= 0
  end
end

您有 class 个方法和实例方法。正如任何 class、class 方法定义以 self.

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

基础 class 上没有 "perfom" 方法,但实例方法上有一个 perfom 方法。

我想你问的是这些工作是 运行 由 class 还是那个 class 的一个实例。看到只有 instace_methods 包含 :perform,我会说 ActiveJobs 是 运行 作为实例。所以你应该能够使用没有线程冲突的实例变量。