Hi!
JobQueue is a ruby gem, that allows you to run Ruby methods and system
commands in parallel. It comes with an executable prun.rb with takes two
arguments: Number of worker threads and a shell scripts, from which line is
executed in parallel wrt the given number of threads.
Thanks to Robert Klemme, who provided some implementation ideas some years
ago.
You're welcome!
Hints for improvements and any type of criticism are very welcome! Hope
you'll find it usefull.
doc: File: README — Documentation for jobQueue (1.0.11)
I would change the API slightly to modify behavior of #push:
1. push(obj, method, *arguments)
2. push(&block)
Example
1. send method
jq.push($stdout, :puts, "hello world")
2. use block
jq.push do
puts "hello world"
end
One could even extend behavior by providing a back channel for results:
jq.push do |back_channel|
back_channel << (1 + complicated_calculation() * 123)
end
For that of course you must define how reply values are dealt with
(there could be a null back channel which just discards results if
configured that way). Alternatively however just the result values of
method and block invocation could be used. Maybe that's cleaner.
Also I would separate support for the call of system: Basically
invoking system is a special case which does not necessarily have
something to do with job queues in general. So a better solution
would be to have a specialized job queue, e.g.
class SystemJobs
attr_reader :jq
def initialize(jq)
@jq = jq
end
def push(*args)
jq.push do |back_channel|
back_channel << system(*args)
# we could use a variant of IO.popen here as well which
# captures output
end
end
end
You then could still do the pretty short
sj.jq.push($stdout, :puts, "hello world")
dev: GitHub - Try2Code/jobQueue: Parallelize Ruby things and shell jobs on a defined number of threads
tests:
jobQueue/test/test_jobqueue.rb at master · Try2Code/jobQueue · GitHub
Kind regards
robert
···
On Mon, Dec 12, 2011 at 11:25 AM, Ralf Mueller <ralf.mueller@zmaw.de> wrote:
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/