Skip to content
ruby implementation of a simple dispatch queue
Ruby
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
specs
.gitignore
.ruby-version
Gemfile
Gemfile.lock
LICENSE
README.md
taskqueue.gemspec

README.md

Twitter: @taquitos License

TaskQueue

A ruby implementation of a simple dispatch queue using procs

Currently, TaskQueue only has api for dispatching tasks asynchronously.

Example

# Create a queue with as many workers as you want or 1 for a serial queue 
queue = TaskQueue.new(name: 'my concurrent queue', number_of_workers: 5)
task = Task.new(work_block: proc { 
  # some work to be done
})
queue.add_task_async(task: task)
# Or don't supply the number of workers and you'll only get 1, making it a serial queue 
queue = TaskQueue.new(name: 'my serial queue')
task = Task.new(work_block: proc { 
  # some work to be done
})
queue.add_task_async(task: task)

Recreatable Tasks

The tasks that are created from the mixin RecreatableTask can be recovered in future executions of the TaskQueue where their were enqueued originally.

Example

# We define a task that includes RecreatableTask
class HelloToRecreatableTask
  include TaskQueue::RecreatableTask

  # The run! method receives a collection of params and defines the real execution of the task itself.
  def run!(**params)
    puts "Hello #{params}"
  end

  # In case the queue gets deallocated with RecreatableTasks on its queue, the hash returned by this function will be stored. Make sure that all values are JSON encodable.
  def params_to_hash
    { to: "fastlane" }
  end
end

queue = TaskQueue(name: 'test queue')
task = HelloToRecreatableTask.new.to_task
queue.add_task_async(task: task)

Run tests

bundle exec rspec
You can’t perform that action at this time.