Как задача celery может принять список файлов в качестве аргумента?

На самом деле, я не знаю, как я могу сделать так, чтобы задача имела список файлов в качестве аргумента.

files = {}
   for file in request.FILES.getlist('files'):
      files[file.name] = file.file.read()

my_celery_task.apply_async(
   kwargs={
      'files': files,
   }
)

При этом возникает ошибка 'Object of type bytes is not JSON serializable'.

Я также пытался добавить эти файлы в конструктор класса, но все равно ничего хорошего, потому что объект не может быть сериализован.

Если я использую files[file.name] = file, бросает InMemoryUploadedFile is not JSON serializable, или если я использую files[file.name] = file.file.read().decode('utf-8') => 'utf-8' кодек не может декодировать байт 0xff в позиции 0: invalid start byte

На самом деле я понятия не имею, как ее решить. Мне нужен словарь вида name: content в качестве аргумента, передаваемого задаче

Вы не можете передать двоичный файл в качестве аргумента задаче celery. Вам нужно хранить его в файловой системе (или S3, или другом хранилище), а затем передать путь к файлам в качестве аргумента.

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