Thread safety in 2.2.2 - Thread.new { do_sth } to do background job?

Hi guys,

I am writing application that is converting files from one format to
another. The process takes some time for larger files, and I want to
run it in backround. My application is running in threaded mode
(enabled in environment.rb) and I know Rails 2.2.2 is thread safe.

Can I simply do in my controller:

def create
@file = MyFile.new(params[:file])
@file.save
Thread.new {
@file.convert
}
end

This seems to be working fine, but should I expect any problems or
this is allowed in Rails 2.2.2, please?

Pff,

what’s wrong with you guys – each time I need answer: nothing!

Maybe no one has a real answer for you :slight_smile:

From my experience, if you’re running ActiveRecord code, you could
have a problem. I tried to use active record on non controller threads
(even using with_connection) and it didn’t work. If you’re not using
ActiveRecord, it shoudn’t be an issue, just don’t forget that the MRI
isn’t really concurrent and you’ll just get real concurrency running
on JRuby.

Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)

2009/1/13 Hubert £êpicki [email protected]:

Hi Hubert,

If @file.convert is high cpu intensive task, you’d better use workers at
background with a queue, or try jruby since MRI use green threads.

Jan

Thanks - well this may be issue. If it was easy to find solutions on
google I would do it myself.

I am using ActiveRecord. The only problem I have noticed so far is
that rails turn off class reloading when config.threadsafe is enabled

  • and it makes my development pain (need to restart server each time
    after I change code).

On 14 Sty, 00:01, “Maurício Linhares” [email protected]

i thought AR was thread-safe in 2.2 ?

It supposed to be. I have a small app use threads with sqlite3, and it
runs well until now :slight_smile:

Jan

i thought AR was thread-safe in 2.2 ?