Ketika saya mencoba mengakses nama tugas dari hasil yang berasal dari grup, Tidak ada yang dikembalikan
Python(s): 3.3.6, 3.4.2
seledri: 3.1.17
proj/seledri.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))
Hasil:
INFO:__main__:ID: c2fa4f30-0691-41ee-8f7b-e7dcbf32d09a, name: None
INFO:__main__:ID: f545bfa0-2ad7-40b3-9d05-561d4c1eba7e, name: None
Hal yang sama tampaknya juga terjadi dengan rantai juga.
Ada juga posting stackoverflow tentang itu:
Dapatkan task_name dari AsyncResult saat mengirimkan rantai di seledri
task_name adalah bidang lokal, itu tidak digunakan untuk apa pun lagi dan saya kira itu harus dihapus sepenuhnya.
Hasil yang dikirim sebenarnya tidak memiliki bidang nama, itu digunakan di beberapa titik untuk membuat serial backend dengan hasil saat menggunakan acar, tetapi sekarang dilakukan secara berbeda.
@ask apakah tidak ada cara untuk mengambil task_name sekarang? Kami memiliki titik akhir yang digunakan untuk mengekspos data tugas ke web, dan kami ingin, dengan AsyncResult, mencatat nama tugas.
Komentar yang paling membantu
@ask apakah tidak ada cara untuk mengambil task_name sekarang? Kami memiliki titik akhir yang digunakan untuk mengekspos data tugas ke web, dan kami ingin, dengan AsyncResult, mencatat nama tugas.