2000 номеров?
Это 16K.Сделай это в памяти.Действительно, объявив размер ваших буферов 16 КБ, вы, вероятно, сможете выполнить всю операцию за один запрос ввода-вывода.А в некоторых крупных 64-разрядных системах размер буфера по умолчанию больше или меньше 2000 номеров.
Ваш объем данных микроскопический.Не тратьте время на оптимизацию такого незначительного объема данных.
with open( "my file.dat", "rb", 16384 ) as the_file:
my_circular_queue = list( read_the_numbers( the_file ) )
if len(my_circular_queue) >= 2000:
my_circular_queue = my_circular_queue[1:]
my_circular_queue.append( a_new_number )
with open( "my file.dat", "wb", 16384 ) as the_file:
write_the_numbers( the_file, my_circular_queue )
Он полностью умещается в памяти.Не тратьте время на изощренные изменения.