Boto3 / S3 / Django: Избегайте блокировки цикла событий во время вычисления хеша файла - PullRequest
0 голосов
/ 24 февраля 2019

От сотрудника Gunicorn + Gevent, выполняющего (многочастную) загрузку на S3 через django-хранилища , как я могу убедиться, что при вычислении хэша содержимого файла / части цикл обработки событийне заблокирован?

При поиске в источнике для django-хранилищ , похоже, нет никакой возможности для передачи в md5 (/ другой хеш) и в источник для botocore похоже, что нет места для выдачи цикла событий во время вычисления хеша.

1 Ответ

0 голосов
/ 25 февраля 2019

В настоящее время существует PR для django-хранилищ, который вычисляет хеш MD5 как данные, полученные приложением .

В итоге, это меняет S3Boto3StorageFile, так что для init и новой части

self._file_md5 = hashlib.md5()

и затем при получении content_bytes

self._file_md5.update(content_bytes)

, а затем при загрузке каждой детали параметр ContentMD5 передается в функцию загрузки детали

ContentMD5=base64.b64encode(self._file_md5.digest()).decode('utf-8')
...