class Qyu::Workers::Split
Starts a worker to split a certain payload key into multiple jobs
Qyu::SplitWorker.new do
slice_size 25 payload_key 'array'
end
Attributes
splittable[RW]
Public Instance Methods
work(queue_name) { |task| ... }
click to toggle source
Assign a splittable variable by being at the end of a block worker.work('queue') do
# do anything # splittable variable must be at the end [1, 2, 3, 4, 5, 6, 6]
end
or by passing payload_key 'array' to worker initializer then just worker.work('queue') @param queue_name [String]
Calls superclass method
Qyu::Workers::Base#work
# File lib/qyu/workers/split.rb, line 32 def work(queue_name) validate_split_parameters! super do |task| if block_given? @splittable = yield(task) else # or by passing # payload_key 'array' # to worker initializer @splittable = task.payload[@payload_key] end @splittable.each_slice(@slice_size).with_index do |slice, i| log(:debug, "Split started for queue '#{queue_name}'") input = @sample ? slice.sample : slice new_payload = task.payload.merge({ @payload_key => input }) task_names_to_start = task.descriptor['starts_parallel'] || task.descriptor['starts_manually'] task_names_to_start.each do |task_name_to_start| task.job.create_task(task, task_name_to_start, new_payload) end end end end