Sha256: c56e4b83588e372f3894204b699efbc825f94a15d2164e7117bf6e881ccd3b27

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

#!/usr/bin/env ruby

#This example shows how to dump a database using 10 processes to do so (and effectivly use 10 cores).

require "rubygems"
require "knjrbfw"
require "ruby_process"

#Holds the 'db_settings'-global-variable.
require "#{Knj::Os.homedir}/example_knj_db_dump_settings.rb"

#Create database-connection.
db = Knj::Db.new($db_settings)

#Get list of databases.
tables = db.tables.list.values

tables_per_thread = (tables.length.to_f / 10.0).ceil
print "Tables per thread: #{tables_per_thread}\n"

threads = []
1.upto(1) do |i|
  threads << Thread.new do
    begin
      thread_tables = tables.shift(tables_per_thread)
      
      Ruby_process.new(:debug => true).spawn_process do |rp|
        rp.static(:Object, :require, "rubygems")
        rp.static(:Object, :require, "knjrbfw")
        
        fpath = "/tmp/dbdump_#{i}.sql"
        
        thread_tables.each do |thread_db|
          rp_db = rp.new("Knj::Db", $db_settings)
          rp_dump = rp.new("Knj::Db::Dump", :db => rp_db, :tables => thread_tables)
          
          rp.static(:File, :open, fpath, "w") do |rp_fp|
            print "#{i} dumping #{thread_db}\n"
            rp_dump.dump(rp_fp)
          end
        end
      end
    rescue => e
      puts e.inspect
      puts e.backtrace
    end
  end
end

threads.each do |thread|
  thread.join
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ruby_process-0.0.9 examples/example_knj_db_dump.rb
ruby_process-0.0.8 examples/example_knj_db_dump.rb
ruby_process-0.0.7 examples/example_knj_db_dump.rb
ruby_process-0.0.5 examples/example_knj_db_dump.rb
ruby_process-0.0.4 examples/example_knj_db_dump.rb