Fork with spawn - RailsOnWave Ruby on Rails w...

来源:百度文库 编辑:神马文学网 时间:2024/07/04 11:35:52
Fork with spawn
Posted by Sandro Paganotti inRuby on Rails - comments are closed
During the development of our current project we needed to handle a very long task (4 minutes). After a bit of googling i foundspawn by Tom Anderson. Here’s how it works:
Spawn let you fork (or thread) a block of code by simply pass it as a parameter to a ‘spawn’ function:
spawn do# very long long taskend
what spawn do (when used with ‘fork’) is recreate an ActiveRecord Connection inside afork method and then execute your block of code. You can also set the priority of the process being create with the option ‘nice’:
spawn(:nice => 7) do# do somethingend
Finally you can wait the end or your child processes with the method Spawn::wait() (I took this example from the official readme):
N.times do |i|# spawn N blocks of codespawn_ids[i] = spawn dosomething(i)endend# wait for all N blocks of code to finish runningwait(spawn_ids)
I haven’t tried to use spawn with threads but as far as I’ve tested it with fork, it works perfectly.