Как я могу проверить что-то на интервале асинхронно в python3? - PullRequest
0 голосов
/ 17 марта 2019

Допустим, у меня есть файл, который, как я знаю, будет обновлен в ближайшее время.Я хочу, чтобы функция 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 нормально?

...