Das Ergebnis des Selleriearbeiters wird ständig abgerufen

8

Ich habe eine Web-App, in der ich Sellerie verwenden möchte, um Hintergrundaufgaben aus einer Datenbank zu laden. Ich lade gerade die Datenbank auf Anfrage, möchte aber die Aufgaben stündlich laden und im Hintergrund arbeiten lassen. Ich benutze Kolben und bin in Python codieren. Ich habe auch wieder laufen.

Bisher habe ich mit Sellerie den Arbeiter dazu gebracht, die Aufgabe und den Takt zu bearbeiten, um die Aufgaben in einem Intervall an den Arbeiter zu senden. Aber ich möchte die Ergebnisse [einen Datenrahmen oder eine Abfrage] von dem Arbeiter abrufen, und wenn das Ergebnis nicht bereit ist, sollte es das vorherige Ergebnis des Arbeiters laden.

Irgendwelche Ideen, wie man das macht?

Bearbeiten

Ich lade die Ergebnisse aus einer Datenbank mit sqlalchemy ab und richte die Ergebnisse auf einer Webseite aus. Ich habe meine Homepage mit all den verschiedenen Links, die alle zu verschiedenen Graphen führen, die ich im Hintergrund laden möchte, damit der Benutzer nicht lange auf Ladezeiten warten muss.

    
Kalimantan 07.09.2016, 19:33
quelle

1 Antwort

7

Die Sellerie Aufgabe wird von einem Arbeiter ausgeführt, und das Ergebnis wird sein gespeichert im Sellerie Backend .

Wenn ich Sie richtig verstehe, dann denke ich, dass Sie wenige Möglichkeiten haben:

  1. Ignoriere das Ergebnis des Ladens des Graphen -Speichern Sie, was auch immer Sie als Nebeneffekt der Aufgabe in Ihrer Datenbank benötigen. Suchen Sie bei Bedarf nach dem neuesten Ergebnis in dieser Datenbank. Wenn die Datenbank Redis ist, finden Sie ZADD und ZRANGE geeignet. Auf diese Weise erhalten Sie das neue, falls verfügbar, oder das vorherige, falls nicht.
  2. Sie können nach dem Ergebnis einer Aufgabe suchen, wenn Sie geben es ID . Sie können dies tun, wenn Sie den Status herausfinden möchten, etwa (% code% ist die Sellerie-App): celery

  3. Verwenden Sie Callback , um weiter zu aktualisieren neues Ergebnis ist fertig.

  4. Lassen Sie einen Hintergrundthread warten für die AsyncResult oder native_join , das von Redis unterstützt wird und entsprechend aktualisieren (nicht empfohlen)

Ich habe die Option # 1 in ähnlichen Fällen (mit MongoDB) persönlich verwendet und festgestellt, dass sie sehr wartbar und flexibel ist. Aber möglicherweise, aufgrund der Art Ihrer Benutzeroberfläche, Option 3 wird besser für Sie Bedürfnisse.

    
creativeChips 10.09.2016, 20:50
quelle

Tags und Links