Я делаю так:
self._stream.read_bytes(block_size, self._on_block_readed)
где block_size - размер куска блока, который я задаю вручную, self._on_block_readed - callback, который вызывается каждый раз, после получения очередных block_size байт, self._stream - объект класса tornado.iostream.IOStream.
Таким образом, если размер всего блока не кратен block_size, то даже после того, как все данные от клиента были получены, self._on_block_readed не вызывается для последнего куска, поскольку ждёт, когда считается block_size байт. Но читать-то уже нечего! Так висит в ожидании.
Вот такая проблема. Подскажите, кто может, как надо поступать в подобных случаях? Буду рад любым советам. Заранее спасибо.