Почему Python io.BytesIO становится очень медленным при увеличении размера?
Я использую Python 3.5.5 из дистрибутива Anaconda. Для создания веб-сервиса я использую бутылку 0.12.13, а именно POST-запрос.
В запросе POST данные запроса находятся в request.body
который является io.BytesIO
объект. Чтобы получить это значение, я использую getvalue()
в соответствии с https://docs.python.org/3/library/io.html.
Сервер принимает строку json из нескольких файлов, декодированных в байты. Когда я отправляю только один файл, getvalue()
это действительно быстро, но более 2 файлов делают его все медленнее. Пример:
start_time = time.time()
postdata = request.body.getvalue() # byte stream
print('getvalue time: {}'.format(time.time() - start_time))
print('len(postdata): {}'.format(len(postdata)))
Выход для 1 файла:
getvalue time: 0.0005793571472167969
len(postdata): 12522
Выход для 2 файлов:
getvalue time: 0.14102387428283691
len(postdata): 21684
Хотя размер двух файлов намного меньше размера бутылки по умолчанию BaseRequest.MEMFILE_MAX
из 102400 байт, я изменил его размер до 1024000 и все еще не улучшил.
Кто-нибудь знает причину этого / обходной путь?
Заранее спасибо!