Как считывать определённый диапазон байтов из файла?

Мне необходимо на питоне считывать из файла x байтов, начиная с n-го байта. Я пользуюсь обычным seek(n), а затем read(x), но возникает проблема.

Программа работает паралельно и считывает множество записей из разных мест разных файлов. Что бы файлы не открывать много раз вновь, их файловые переменные кэшируются. Из-за этого разные потоки могут управлять одной и той же файловой переменной. И бывает так, что в одном потоке указатель перемещается на позицию x, затем другой поток двигает этот указатель ещё раз на нужную ему позицию x1 и только потом первый поток считывает свои n байтов и естественно получает неверные значения.

Я пробовал решить это изменив функцию кэширования, теперь кэшируется не одна файловая переменная, а сразу несколько и функция следит, что бы с каждой переменной в одно время взаимодействоал только один поток. Однако, возникла новая проблема, связанная с ошибкой OSError: [Errno 24] Too many open files: 'file.txt'. В windows нельзя открыть больше 8192 файлов одновременно, а мне нужно больше. И я не смог имзенить этот лимит ни в рестре, ни сторонними программами.

Ищу ответ у более умных людей, каким образом можно решить данную проблему. Заранее спасибо.


Ответы (0 шт):