/TaskQueue

ruby implementation of a simple dispatch queue

Primary LanguageRubyMIT LicenseMIT

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