I am working on a cross-platform GUI desktop application, written in Ruby. The application will use MacRuby to provide the GUI on Mac OS X, and will use Qt for the GUI on other platforms. The application is a multimedia tool that will allow for such things as ripping CDs or DVDs and encoding them to various formats, or transcoding multimedia files from one format to another.
These tasks are time consuming and therefore must be run in the background so as not to freeze the GUI while they are executing. Furthermore, the background jobs should be able to be canceled and/or paused, and be able to report status and progress to the GUI. There may also be a need to assign priorities to the jobs, so that higher priority jobs run before lower priority jobs, and also to have dependencies between jobs so that a job does not start executing until all of its dependencies have completed.
My question is: what tools or techniques would be best for handling these kinds of background jobs in a Ruby GUI/desktop application? I'd prefer not to "roll my own" job manager to spawn processes or threads and manage the starting and stopping of jobs, etc.
Edit: after posting this question I realized I had asked a very similar question for a C++ solution a while back. My requirements for this Ruby solution are the same as what I had posted for the C++ solution here: C++ master/worker