Необходимо вернуть объект из процесса очереди общих задач celery

Я столкнулся с ошибкой "kombu.exceptions.EncodeError: Object of type 'JsonResponse' is not JSON serializable "

В моем файле settings.py :

CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_BACKEND = 'django-db'

Поэтому он принимает ответ только в виде json-значения. Но мне нужно вернуть объект или экземпляр. Пример: мне нужно вернуть путь к файлу. Заранее спасибо.

@shared_task
def celery_upload(path, id , user_id):
    upload = Upload()
    result = upload.file_generation_validation(path, id , user_id)
    excel = Excel()
    file_path = excel.Export(result["error"], "aaa")
    return file_path

если я верну результат, это будет успешно, но объект file_path выбрасывает ошибку.

Попробуйте использовать формат сериализации pickle вместо JSON, тогда вы сможете отправлять/получать сложные объекты.

Пожалуйста, ознакомьтесь с приведенными ниже ссылками https://docs.celeryproject.org/projects/kombu/en/stable/userguide/serialization.html

https://coderbook.com/@marcus/how-to-pass-complex-data-types-to-celery-tasks/

Вернуться на верх