Как организовать цикл while для мониторинга файловой системы и не нагружать процессор на 100%?

Рейтинг: 0Ответов: 2Опубликовано: 27.01.2015

Мне нужен постоянный контроль над файловой системой. Как это организовать без циклов, ума не приложу.

Пустой цикл while нагружает процессор на 80-100% на моей машине.

while True: pass

Это как-то решается?

Ответы

▲ 1Принят

Странное решение... но, как вариант, поставить тайм-аут на секунду или сколько там нужно.

▲ 11

Мне нужен постоянный контроль над файловой системой. Как это организовать без циклов, ума не приложу.

Не нужно терроризировать ОС и диск на наличие изменений. Нужно просто попросить их сообщать о них. Это куда практичнее и надежнее. Для linux систем есть такая штука, как inotify. Просто указываете, что Вы хотите мониторить (создание файлов, удаление, изменение) и ждете. Для питона даже есть готовая обвязка - https://github.com/seb-m/pyinotify. (пример посмотрите здесь.)

Если нужна поддержка винды, тогда посмотрите на watchdog. На хабре есть детальное описание.

Если все же вышеприведенное не устраивает (например, ущербностью апи:) ), то можно конечно сделать и обычным циклом. Только не забудьте добавить в конец sleep на одну секунду. Для большинства задач +-1 секунда разницы никакой, а нагрузка на процессор упадет в разы. Возможно, даже 3-5 секунд sleep'a будет достаточно.