jobqueue

Queues with a user definied number of working threads


License
BSD-3-Clause
Install
pip install jobqueue==0.0.2

Documentation

JobQueue / ParallelQueue - Let run your jobs in parallel

This repository contains JobQueue and ParallelQueue. Both libraries provide similar functionality: Push arbitrary blocks of code to a Queue and execute them on a user-defined number of Threads.

JobQueue offers no support for returning the results of the blocks, i.e. the user has to collect them. ParallelQueue is based on [parallel] (https://github.com/grosser/parallel, https://rubygems.org/gems/parallel) which handles the return values internally and users can get the results out-of-the-box.

For the moment I keep both classes, but the ParallelQueue class is a lot cleaner and also includes the slightly faster JobQueue implentation. That's why I'll remove the JobQueue class sometime in the future.

jobQueue/parallelQueue can do the following things:

  • Run blocks, Procs and Lambdas
  • Run instance and class methods
  • Respect user definded locks (not needed on ParallelQueue)
  • Parallelizing System commands is removed, because it can easily be implemented with 'parallel'

I started a python2 implementation of this, which can be installed via [pip] (https://pypi.python.org/pypi/jobqueue). But I stopped because the multiprocessing.Pool module nearly does what I need ... and blocks do not exist in python ;-)

Installation

Gem Installation

Download and install jobQueue with the following.

   gem install jobQueue
   gem install parallelQueue

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)
  pq = ParallelQueue.new

ParallelQueue does not need the number of workers in the constructor. It has to be provided in the run methods.

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
  results = qp.run(8)
  pq.justRun(8)        # no results

That's it. You might have look at tests.

Support, Issues, Bugs, ...

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

Changelog

JobQueue:

  • 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

ParallelQueue:

  • 1.0.0: parallel-based child-class of Queue, JobQueue.run is implementation as justRun

Credits

[Robert Klemme] For the first hints: https://www.ruby-forum.com/topic/68001#86298

License

jobQueue use the BSD License parallelQueue use the IRC License

:include LICENSE


= Other stuff

Author:: Ralf Mueller stark.dreamdetective@gmail.com Requires:: Ruby 1.9 or later License:: Copyright 2011-2016 by Ralf Mueller Released under BSD-style license. See the LICENSE file included in the distribution.