Методы ActiveJobs являются экземплярами или методами класса? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть класс задания, и мне было интересно, смогу ли я определить вспомогательный метод таким образом, чтобы переменные, инициализированные в одной задаче, не были видны следующей задачей, выполняющей это задание.

Другими словами, безопасен ли следующий поток?

class OrdersUpdateJob < ActiveJob::Base

  def perform
    p my_method
  end

  def my_method
     @sth ||= 0
  end
end

1 Ответ

0 голосов
/ 25 августа 2018

У вас есть методы класса и методы экземпляра.Как и любой класс, определение методов класса начинается с self.

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

В базовом классе нет метода perfom, но в методах экземпляра есть один метод perfom.

Я думаю, чтовы спрашиваете, выполняются ли задания классом или экземпляром этого класса.Видя, что только instace_methods включает: execute, я бы сказал, что ActiveJobs запускаются как экземпляры.Так что вы должны иметь возможность использовать переменные экземпляра без конфликтов потоков.

...