2016-12-22 8 views
1

Idealerweise brauche ich zwei Jobs. Eine, um Daten von einer externen URL zu sammeln und eine zweite, um sie zu verarbeiten.Übergabe von Variablen zwischen Rufus Scheduler-Jobs

Ich möchte die Daten nicht jedes Mal erfassen, um die Belastung des externen Systems zu reduzieren. Die Ausgabedaten müssen regelmäßig verarbeitet werden, da es sich um eine zeitgesteuerte Regelengine handelt.

aber ich bin nicht wirklich sicher, wie aus dem ersten Scheduler die Ausgabe-Array zu übergeben in der zweiten verwendet werden ... hier ist ein Beispiel dafür, was ich versuche zu tun ...

SCHEDULER.every '10m', :first_in => 0 do |job| 
url = http://sample.com 
output = [] 
open (url) do |data| 
data.each_line { |line| output.push (line) } 
end 

SCHEDULER.every '1m', :first_in => 0 do |job| 
#Code to process output (from first scheduler) 
end 

Jede Hilfe würde sehr geschätzt werden!

Dank

Antwort

1

Sie eine globale Variable (hier $output) nutzen könnten und die Arbeitsplätze erzählen die gleiche Mutex verwenden (hier „PIPE0“, nur einen zufälligen Namen wählte ich).

Etwas wie:

SCHEDULER.every '10m', mutex: 'pipe0' do |job| 
    $output.concat(open('http://www.example.org').readlines) 
end 

SCHEDULER.every '1m', mutex: 'pipe0' do |job| 
    if $output 
    # do something with the output 
    end 
    $output = nil 
end 
+1

Wie wunderbar der Autor von Rufus Scheduler zu haben, meine Frage zu beantworten - in kürzester Zeit auch überhaupt nicht. Vielen Dank! Wirklich hilfreich - Ich schaute auf globale Variablen, hatte aber nicht den 'Mutex' Abschnitt zum Scheduler Feld hinzugefügt. Prost. –

Verwandte Themen