f.write()
записывается в собственный буфер процесса Python (аналогично функциям C fwrite()
). Однако данные фактически не заливаются в буферы ОС, пока вы не назовете f.flush()
или f.close()
, или когда буфер заполнится. После этого данные становятся видимыми для всех других приложений.
Обратите внимание, что ОС выполняет другой уровень буферизации / кэширования, который используется всеми запущенными приложениями. Когда файл сбрасывается, он записывается в эти буферы, но еще не записан на диск , пока не пройдет некоторое время, или когда вы вызываете fsync()
. Если ваша ОС сбой или компьютер потеряет питание, такие несохраненные изменения будут потеряны.
Это работает, потому что вы выполняете совместную многозадачность.
Браузер должен делать сразу несколько вещей, и только одна из них - это выполнение JavaScript. Но одна из вещей, для которой JavaScript очень часто используется - это попросить браузер создать элемент отображения. Часто предполагается, что это делается синхронно (в частности, поскольку JavaScript не выполняется параллельно), но нет никакой гарантии, что это так, и JavaScript не имеет четко определенного механизма ожидания.
Решение состоит в том, чтобы «приостановить» выполнение JavaScript, чтобы позволить потокам рендеринга наверстать упущенное. И это тот эффект, который делает setTimeout ()
с таймаутом 0 . Это как выход потока / процесса в C. Хотя, кажется, он говорит: «Запустите это немедленно»
Вызывая setTimeout, вы даете странице время реагировать на то, что делает пользователь. Это особенно полезно для функций, запускаемых во время загрузки страницы.
setTimeout ()
покупает вас некоторое время, пока элементы DOM не загружаются, даже если установлено значение 0.
Проверьте это: setTimeout