Почему 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 и все еще не улучшил.

Кто-нибудь знает причину этого / обходной путь?

Заранее спасибо!

0 ответов

Другие вопросы по тегам