Celery: Von der Gruppe zurückgegebene Ergebnisse haben task_name=None

Erstellt am 13. Feb. 2015  ·  3Kommentare  ·  Quelle: celery/celery

Wenn ich versuche, auf den Aufgabennamen aus einem Ergebnis zuzugreifen, das aus der Gruppe stammt, wird None zurückgegeben

Python(s): 3.3.6, 3.4.2
Sellerie: 3.1.17

proj/celery.py

from celery import Celery

app = Celery('proj',
             broker='amqp://',
             backend='amqp://',
             include=['proj.tasks'])

# Optional configuration, see the application user guide.
app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600,
)

if __name__ == '__main__':
    app.start()

proj/tasks.py

from proj.celery import app

@app.task
def add(x, y):
    return x + y


@app.task
def mul(x, y):
    return x * y

run_add.py

from celery import group

from proj import tasks

import logging

log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)

results = group([
    tasks.mul.s(4,4),
    tasks.add.s(3,3)
]).delay()

while results.waiting():
    pass

if results.successful():
    for result in results:
        log.info('ID: {}, name: {}'.format(result.task_id, result.task_name))

Ergebnis:

INFO:__main__:ID: c2fa4f30-0691-41ee-8f7b-e7dcbf32d09a, name: None
INFO:__main__:ID: f545bfa0-2ad7-40b3-9d05-561d4c1eba7e, name: None

Hilfreichster Kommentar

@ask gibt es jetzt keine Möglichkeit, den task_name zu erfassen? Wir haben einen Endpunkt, der verwendet wird, um Aufgabendaten für das Web bereitzustellen, und wir möchten bei einem AsyncResult den Namen der Aufgabe protokollieren.

Alle 3 Kommentare

Das gleiche scheint auch mit Ketten zu passieren.
Es gibt auch einen Stackoverflow-Beitrag dazu:

Rufen Sie den task_name von AsyncResult ab, wenn Sie Ketten in Sellerie senden

task_name ist ein lokales Feld, es wird für nichts mehr verwendet und ich denke, es sollte vollständig entfernt werden.

Das gesendete Ergebnis hat eigentlich kein Namensfeld, es wurde irgendwann verwendet, um das Backend mit dem Ergebnis bei Verwendung von pickle zu serialisieren, aber das wird jetzt anders gemacht.

@ask gibt es jetzt keine Möglichkeit, den task_name zu erfassen? Wir haben einen Endpunkt, der verwendet wird, um Aufgabendaten für das Web bereitzustellen, und wir möchten bei einem AsyncResult den Namen der Aufgabe protokollieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen