есть несколько способов сделать это. Я расскажу о некоторых из них, от уродливых до элегантных.
Решения, протестированные против Ruby 1.9.3p392 на Debian GNU/Linux 7 с rufus-scheduler 2.0.23 (https://rubygems.org/gems/rufus-scheduler).
Вы можете использовать глобальную переменную:
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.start_new
scheduler.every '1s' do
$counter0 ||= 0
$counter0 += 1
p [ :c0, $counter0 ]
end
scheduler.every '1s' do
$counter1 ||= 0
$counter1 += 1
p [ :c0, $counter1 ]
end
scheduler.join
Или вы могли бы централизовать переменные работу в одной глобальной переменной (примечание: это не поточно-):
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.start_new
$job_vars = {}
scheduler.every '1s' do |job|
($job_vars[job.object_id] ||= {})['counter'] ||= 0
$job_vars[job.object_id]['counter'] += 1
p [ job.job_id, job.object_id, $job_vars[job.object_id]['counter'] ]
end
scheduler.every '1.5s' do |job|
($job_vars[job.object_id] ||= {})['counter'] ||= 0
$job_vars[job.object_id]['counter'] += 1
p [ job.job_id, job.object_id, $job_vars[job.object_id]['counter'] ]
end
scheduler.join
One шаг дальше, просто для удовольствия (но не поточно-):
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.start_new
$job_vars = {}
job = lambda { |job|
($job_vars[job.object_id] ||= {})['counter'] ||= 0
$job_vars[job.object_id]['counter'] += 1
p [ job.job_id, job.object_id, $job_vars[job.object_id]['counter'] ]
}
scheduler.every '1s', &job
scheduler.every '1.5s', &job
scheduler.join
Наконец, вы можете добавить #vars к работе с lass:
require 'rufus-scheduler'
class Rufus::Scheduler::Job
def vars
@vars ||= {}
end
end
scheduler = Rufus::Scheduler.start_new
scheduler.every '1s' do |job|
job.vars['counter'] = (job.vars['counter'] || 0) + 1
p [ job.job_id, job.object_id, job.vars['counter'] ]
end
scheduler.every '1.5s' do |job|
job.vars['counter'] = (job.vars['counter'] || 0) + 1
p [ job.job_id, job.object_id, job.vars['counter'] ]
end
scheduler.join
Это решение, которое я предпочитаю. Я намерен добавить подобный пакет переменных в Job в rufus-scheduler 3.0 (https://github.com/jmettraux/rufus-scheduler).
Вы также можете поместить переменную в другое место и использовать job_id/job.object_id в качестве ключа для ее получения (как это делают первые штрихи кода).
Надеюсь, это поможет.
с работой локальной переменные в течение предстоящего Руфуса-планировщиком 3,0 https://github.com/jmettraux/rufus-scheduler/commit/26bc7996f9416ab8cfa70487483a5616ac8f3123 – jmettraux