Threadz Thread Pool Library¶ ↑
<img src=“https://travis-ci.org/nanodeath/threadz.png?branch=master” alt=“Build Status” /> <img src=“https://codeclimate.com/badge.png” /> <img src=“https://gemnasium.com/nanodeath/threadz.png” alt=“Dependency Status” />
Description¶ ↑
This is a thread pool library that you can do two main things with, which I’ll demonstrate in code:
# These are more for "fire and forget" tasks T1 = Threadz::ThreadPool.new T1.process { puts "my first task" } T1.process { puts "my second task" } # If you care when the tasks complete, use batches T2 = Threadz::ThreadPool.new b = T2.new_batch b << lambda { puts "my first task" } b << lambda { puts "my second task" } puts "do a couple of other things..." b.wait_until_done # You can do other things, too T3 = Threadz::ThreadPool.new b = T3.new_batch b << lambda { puts "my first task" } b << lambda { puts "my second task" } puts "do a couple of other things..." b.when_done { puts "woohoo, done with tasks" } puts "and some other stuff, blah" b = T3.new_batch b << lambda { 10000000.times {} } b.wait_until_done(:timeout => 0.1) puts b.completed? ? "finished!" : "didn't finish" # Error handling b = T3.new_batch(:max_retries => 3) b << lambda { raise } b.wait_until_done puts b.errors b = T3.new_batch(:max_retries => 3, :error_handler => lambda { |error, control| puts "Error! #{error}" }) b << lambda { raise } b.wait_until_done # See the specs for more error handling stuff. Much better examples.
The thread pool is also smart – depending on load, it can either spawn or cull additional threads (at a rate you can set).
Examples¶ ↑
For examples, please see the well-documented specs. They’re all fairly simple and straightforward. Please message me if you have issues that aren’t answered by reading the spec.