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
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.
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.