Сохранение файлов на S3 не работает внутри Celery worker
У меня возникают проблемы с хранением файлов в S3 из задачи celery в django. Я делаю следующие вещи
- Получение данных из БД
- Создание XLSX-файла с помощью BytesIO
- Хранение этого файла с помощью
file.save
метода Django
сниппат кода
try:
excel_file = generate_xlsx_file(sheet_dfs)
except Exception as e:
logger.exception("Error while generating excel file")
return
# Save the report
report = Report.objects.create()
file_name = generate_file_name()
# Save the file
report.file.save(file_name, ContentFile(excel_file))
в последней строке, celery worker просто останавливается и не обрабатывает другие задачи. Также этот код работает нормально, если я запускаю его в оболочке django shell
Так что проблема была в eventlet, я запускал celery workers с eventlet и их удаление решило проблему. Я нашел обходной путь для этого в этом ответе: Celery with Eventlets fails when uploading to s3 (boto3)