Project

cabiri

0.0
No commit activity in last 3 years
No release in over 3 years
An easy and intuitive Ruby job queue for working with parallel processes.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

Introduction¶ ↑

Cabiri is an easy and intuitive Ruby job queue for working with parallel processes. This gem requires Ruby 1.9.3 or greater.

Getting Started¶ ↑

Install the gem at the command prompt:

gem install cabiri

If it complains about Ruby version 1.9.3 not being installed, you can do the following:

rvm get head
rvm reload
rvm install 1.9.3

Examples¶ ↑

Cabiri is rather straightforward.

# myapp.rb
require 'cabiri'

queue = Cabiri::JobQueue.new

queue.add('my first job') do
  # define your first job here
  result = 0
    100000000.times do |t|
    result += t
  end
  result
end

queue.add('my second job') do
  # define your second job here
  result = 0
    200000000.times do |t|
    result += t
  end
  result
end

queue.add('my third job') do
  # define your third job here
  result = 0
    300000000.times do |t|
    result += t
  end
  result
end

# start the queue and specify how many processes you want the queue to run in parallel.
# This command blocks until all jobs in the queue have been finished.
queue.start(2)

# get results from all three jobs
result_1st_job = queue.finished_jobs['my first job'].result
result_2nd_job = queue.finished_jobs['my second job'].result
result_3rd_job = queue.finished_jobs['my third job'].result

Alternatively, if having a blocking call is something you’d like to avoid, you can also do as shown below.

# myapp.rb
require 'cabiri'

queue = Cabiri::JobQueue.new

queue.add('my first job') do
  # define your first job here
  result = 0
    100000000.times do |t|
    result += t
  end
  result
end

queue.add('my second job') do
  # define your second job here
  result = 0
    200000000.times do |t|
    result += t
  end
  result
end

queue.add('my third job') do
  # define your third job here
  result = 0
    300000000.times do |t|
    result += t
  end
  result
end

# start the queue and specify how many processes you want the queue to run in parallel.
# This command blocks until all jobs in the queue have been finished.
# You can start the queue in a different thread to get around this.
Thread.new do
  queue.start(2)
end

while !queue.finished?
  # do something useful
  sleep 1
end

# get results from all three jobs
result_1st_job = queue.finished_jobs['my first job'].result
result_2nd_job = queue.finished_jobs['my second job'].result
result_3rd_job = queue.finished_jobs['my third job'].result