360doc
Fork with spawn - RailsOnWave Ruby on Rails w...(转载)
tags: Spawn

Fork with spawn

Posted by Sandro Paganotti in Ruby on Rails - comments are closed digg this add to delicious

During the development of our current project we needed to handle a very long task (4 minutes). After a bit of googling i found spawn 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 task
end

what spawn do (when used with 'fork’) is recreate an ActiveRecord Connection inside a fork 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 something
end

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 code
spawn_ids[i] = spawn do
something(i)
end
end
# wait for all N blocks of code to finish running
wait(spawn_ids)

I haven’t tried to use spawn with threads but as far as I’ve tested it with fork, it works perfectly.

[上一篇] [下一篇]   (shaobin0604@163.com 的分类目录 [Ruby])
发表评论
发送评论时内容自动复制到剪切板