Skip to content
Framework to run tasks in separate processes.
Latest commit d8d0aa5 Nov 20, 2013 @kschiess Version bump
Failed to load latest commit information.
examples . prototype for server op Mar 12, 2012
lib Fixes parent-child communication. New release. Nov 20, 2013
spec Fixes data race Nov 20, 2013
.gitignore Fixes parent-child communication. New release. Nov 20, 2013
Guardfile + Better test isolation (guard runs in a different order than rake) Dec 5, 2011
History.txt Fixes parent-child communication. New release. Nov 20, 2013
LICENSE . May 4, 2010
procrastinate.gemspec Version bump Nov 20, 2013



'procrastinate' does the process handling so you don't have to. It leaves you 
to concentrate on what to run when, not orchestration of low level details. 

This library will be ideal for quickly scheduling of a lot of long running
tasks. You can easily control how many processes are run at any time. Your 
main thread can continue to do useful work until it accesses the results of
the computation, at which point it will wait for the processes to finish. 


  require 'procrastinate/implicit'

  class Worker
    def do_work
      puts "> Starting work in process #{}"
      sleep 2
      puts "< Work completed in process #{}"

  worker = Procrastinate.proxy(

  10.times do 


The above example will output something like 

  > Starting work in process 56144
  > Starting work in process 56145
  > Starting work in process 56146
  > Starting work in process 56147
  > Starting work in process 56148
  > Starting work in process 56149
  < Work completed in process 56144
  < Work completed in process 56145
  < Work completed in process 56146
  < Work completed in process 56147
  < Work completed in process 56148
  < Work completed in process 56149
  > Starting work in process 56150
  > Starting work in process 56151
  > Starting work in process 56152
  > Starting work in process 56153
  < Work completed in process 56150
  < Work completed in process 56151
  < Work completed in process 56152
  < Work completed in process 56153
(The output depends on the number of cores your machine has)


This library runs with MRI Ruby >= 1.9. 

Ruby 1.9-p136 users must use this patch:

As a general remark: Interaction with Ruby versions is significant. Please 
use the latest version available to you, since fork & threading bugs are 
likely to be fixed there. 


Due to the way we handle signal traps, you cannot start more than one
Scheduler. We might allow that in the future. 

Also: signal traps interact with other libraries and might cause things to 
break. This is the real world. 


We're still adding features that we believe must be in 1.0. What is there 
mostly works; Multi-{Processing, Threading} is always a difficult topic and
we're glad to receive bug reports.  

Please see the LICENSE file for license information. 

(c) 2010 Kaspar Schiess, Patrick Marchi
Something went wrong with that request. Please try again.