JobQueue - Let run your jobs in parallel

This package contains jobQueue:

* A simple class to parallalize your work on a user definend number of threads
* A ruby script, which uses the above class to run each line of a shell script

jobQueue can do the following things:

  • Run blocks, Procs and Lambdas

  • Run instance and class methods

  • Run shell commands

  • Respect user definded locks

I started a python2 implementation of this, which can be installed via pip (pypi.python.org/pypi/jobqueue). When its maature enough, I will use the ruby version numbers for it.

Installation

Gem Installation

Download and install jobQueue with the following.

gem install jobQueue

Requirements

JobQueue requires Ruby only, but versions 1.9.x are needed to make use of system threads.

Usage

Parallelize Ruby's blocks, procs, lambdas and things

Create a JobQueue with nThreads worker with:

jq = JobQueue.new(nThreads)

Use its push method to put in something to do

  • For blocks:

    jq.push do
      myObject.method0(...)
      myObject.method1(...)
      myObject.method3(...)
    end
    
  • For procs and lambdas:

    jp.push(myProc,arg0,arg1,...)
    
  • For object methods:

    jq.push([myObject,[:method,arg0,arg1,...])
    
  • Same code can be used for class methods:

    jq.push(myClass,[:myClassMethod,arg0,arg1,...])
    

To start the workers, call

jq.run

That's it. You might have look at tests, that come with the jobQueue gem.

Parallelize system commands

Use a separate class for this and push string to it:

jq = SystemJobs.new(nThreads)
jq.push('find ./src -name "*.rb"','find ./downloads -name "*.rb"')

will start 2 parallel searches for ruby files. This is implemented in the prun.rb script, which comes with the jobQueue gem. To run each line of a shell script on 10 threads, use:

prun.rb -j 10 jobs.sh

The '-j' switch is optional. Default is the maximum number of cores. The script accepts multiple files and processes one after another. Try '-h' for documentation.

Support, Issues, Bugs, …

please use personal mail, ruby-lang mailing list or github

Changelog

  • 1.0.11: prun.rb now ignores empty lines

  • 1.0.10: more flexible logging control (new switches '-l' and '-b')

  • 1.0.9: print out stdout and stderr from the jobs given to prun.rb, use '-D' to avoid printing

  • 1.0.8: support AIX for getting the maximum number of processors, improve processor count for jruby and rbx

Credits

Robert Klemme

For the first hints: www.ruby-forum.com/topic/68001#86298

License

jobQueue use the BSD License

:include LICENSE


Other stuff

Author

Ralf Mueller <[email protected]>

Requires

Ruby 1.9 or later

License

Copyright 2011-2013 by Ralf Mueller Released under BSD-style license. See the LICENSE file included in the distribution.