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:

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.

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).

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

* Hubert Łępicki <hubert.lepicki@gmail.com> [2009-01-12 03:54:34 -0800]:

i thought AR was thread-safe in 2.2 ?

* AD <straightflush@gmail.com> [2009-01-13 22:49:59 -0500]:

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