Необходимо вернуть объект из процесса очереди общих задач 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/