Большой файл не был записан на диск сразу после вызова close ()?

Я создаю большой файл с моим скриптом Python (более1GBна самом деле их 8). Сразу после создания я должен создать процесс, который будет использовать эти файлы.

Сценарий выглядит так:

# This is more complex function, but it basically does this:
def use_file():
    subprocess.call(['C:\\use_file', 'C:\\foo.txt']);


f = open( 'C:\\foo.txt', 'wb')
for i in 10000:
    f.write( one_MB_chunk)
f.flush()
os.fsync( f.fileno())
f.close()

time.sleep(5) # With this line added it just works fine

t = threading.Thread( target=use_file)
t.start()

Но приложениеuse_file действует какfoo.txt пустой. Происходят странные вещи:

если я выполнюC:\use_file C:\foo.txt в консоли (после завершения скрипта) я получаю правильные результатыесли я выполню вручнуюuse_file() в другой консоли Python я получаю правильные результатыC:\foo.txt виден на диске сразу послеopen() назывался, но остается размер0B до конца сценарияесли я добавлюtime.sleep(5) это только начинает работать как ожидалось (или скорее требуется)

Я уже нашел:

os.fsync() но это не похоже на работу (результат отuse_file как будтоC:\foo.txt был пуст)С помощьюbuffering=(1<<20) (при открытии файла) тоже не работает

Мне все больше и больше интересно об этом поведении.

Вопросов:

Ли питонвилка close() операция в фоновом режиме? Где это задокументировано?Как обойти это?Я что-то пропустил?После добавленияsleep: это ошибка Windows / Python?

Примечания: (на случай, если что-то не так с другой стороной)use_data использует:

handle = CreateFile("foo.txt", GENERIC_READ, FILE_SHARE_READ, NULL,
                               OPEN_EXISTING, 0, NULL);
size = GetFileSize(handle, NULL)

А потом процессыsize байты изfoo.txt.

Ответы на вопрос(2)

Ваш ответ на вопрос