On Wednesday, September 12, 2012 2:11:41 AM UTC+1, Jeffrey Jones wrote:
Hello all.
I am planning on using ActiveSupport::Notifications and have a question about threading. For the purposes of this question I am assuming config.threadsafe! is enabled.
Will a subscriber execute in the same thread as the code that caused it to be triggered or do they run in separate threads?
I would have thought that was easy to test. Currently everything happens on the thread triggering the event. There's also code in rails (eg ActiveRecord's logsubscriber) that use thread local variables in notification processing so I wouldn't that would be changed in a hurry.
Fred
The reason I ask is that I would like to do something like
In Controller Code:
def action
Module.events[Thread.current] = Event.new # Module.events returns a hash
# rest of action code
end
And elsewhere:
ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, start, finish, id, payload|
event = Module.events[Thread.current] # returns the Event that was created in the controller.
# Do processing on event
end
Obviously if the Subscriber runs in a different thread then this will not work since Thread.current will not match so I wanted to check. Note that in this case I do not want to pass the Event as part of the payload because I want to be able to use existing rails built-in notifications without having to modify them.
Cheers
Jeff