lib/transporter/parallelizer.rb in myreplicator-1.0.5 vs lib/transporter/parallelizer.rb in myreplicator-1.0.6
- old
+ new
@@ -32,12 +32,14 @@
reaper = nil
while @queue.size > 0
if @threads.size <= @max_threads
@threads << Thread.new(@queue.pop) do |proc|
+ Thread.current[:thread_state] = "running"
@klass.new.instance_exec(proc[:params], &proc[:block])
- end
+ Thread.current[:thread_state] = "done"
+ end
else
unless @manager_running
reaper = manage_threads
@manager_running = true
end
@@ -61,18 +63,21 @@
def manage_threads
Thread.new do
while(@threads.size > 0)
done = []
@threads.each do |t|
- done << t if t.stop?
+ done << t if t[:thread_state] == "done" || !t.status
+ # puts t.object_id.to_s + "--" + t.status.to_s + "--" + t.to_s
+ # raise "Nil Thread State" if t[:thread_state].nil?
end
done.each{|d| @threads.delete(d)} # Clear dead threads
# If no more jobs are left, mark done
if done?
@done = true
else
+ puts "Sleeping for 2"
sleep 2 # Wait for more threads to spawn
end
end
end