Допустим, у меня есть файл, который, как я знаю, будет обновлен в ближайшее время.Я хочу, чтобы функция Python запускалась (примерно), как только это произойдет.
Я настроил что-то рудиментарное, чтобы ожидать ввода:
import os, time
modification_time = os.path.getmtime(file)
def wait_for_update(file):
modified = False
while not modified:
if modification_time == os.path.getmtime(file):
time.sleep(1)
else:
modified = True
file_contents = file.read()
Теоретически, это должно работать нормально.
Тем не менее, я пришел из фона Javascript.В Javascript, однопоточном языке, эквивалент этой функции остановит всю программу до тех пор, пока цикл не завершится - и драгоценные секунды времени, которые могут быть потрачены на обработку других входных данных, будут потрачены впустую.
В Javascript естьудобная функция window.setTimeout()
, которая ставит в очередь функцию, которая будет запущена в какой-то момент в будущем, когда в основном потоке нет процессов.Он не является действительно асинхронным, он просто смещает эту операцию немного в будущее, оставляя другие вещи происходящими в это время.
Так что тот же процесс, написанный на рекурсивном JS, может выглядеть примерно так:
function waitForUpdate(file) {
var modified = false;
modified = compareFileModificationDates();
if(modified) {
modified = true;
// do other things
} else {
setTimeout(waitForUpdate(file), 1000);
}
}
Нужно ли делать что-то подобное в Python?Или time.sleep
нормально?