title: Boto3/S3/Django: Avoid blocking the event loop while file hash being calculated
body: <p>From a gunicorn+gevent worker, making (multipart) uploads to S3 via <a href="https://django-storages.readthedocs.io/en/latest/" rel="nofollow noreferrer">django-storages</a>, how can I make sure that during the calculation of the hash of file/part contents, the event loop is not blocked?</p>
  
  <p>Looking in the <a href="https://github.com/jschneier/django-storages/blob/f0094631e509ab0cddc1a9ababcd27210a078db5/storages/backends/s3boto3.py" rel="nofollow noreferrer">source for django-storages</a>, there doesn't really seem to be any scope for passing in the md5(/another hash), and in the <a href="https://github.com/boto/botocore/blob/1ae092ed95b39c3336ba48c5cbd71b7c37924d05/botocore/handlers.py#L200" rel="nofollow noreferrer">source for botocore</a> there doesn't seem to be scope for yielding the event loop while the hash is being calculated.</p>