Python - является ли процессор time.sleep (n) интенсивным? [Дубликат]

На этот вопрос уже есть ответ здесь:

Python: Pass или Sleep для длительных процессов? 7 ответов

мы играли с идеей использованияtime.sleep(n) в скрипте Python, чтобы заставить его выполнять задания с разными интервалами. Псевдокод будет выглядеть так:

total_jobs = [...]

next_jobs_to_run = next_closest(total_jobs)
min_time_to_wait = closestTime(nextJobsToRun)

wait until min_time_to_wait
run them all 
get next jobs

Подводя итог, программа спит, пока не будет выполнено следующее задание. Он запускает задание, находит следующее задание для выполнения и спит до тех пор, пока ему не потребуется выполнить следующее задание (продолжается до бесконечности). Я планирую запустить это на Linux-машине - возможно использование cron. У кого-нибудь есть мнения по любому?

 Serdalis12 июн. 2013 г., 23:40
Название и вопрос не связаны?
 abarnert12 июн. 2013 г., 23:55
@Serdalis: онине тот же вопрос, но ониопределенно связаны. Еслиsleep делает ожидание занято, что в значительной степени решает вопрос, какой из них использовать (в пользу "не "sleep); если это не такт, это оставляет вопрос открытым. (Конечно, как оказалось, это нет.)

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

Решение Вопроса

Документация говорит:

Приостановить выполнение на указанное количество секунд.

Питон можетЭто фактически гарантирует, что в каждой возможной реализации это означает, что ОС никогда не будет планировать ваш процесс во время сна. Но на каждой платформе Python пытается сделать что-то подходящее, чтобы заблокировать на указанное время, без использования какого-либо процессора. На некоторых платформах это может все еще означать немного CPU, но этобудет как можно меньше.

В частности, так как вы спросили о Linux, и, вероятно, CPython:

На Linux и на большинстве других платформ POSIX он обычно используетselect, Увидеть3.3 источника.

справочная страница проясняет, чтоselect приостанавливается до сигнала, тайм-аута или готовности ввода / вывода (и в этом случае fds отсутствуют, поэтому последнее невозможно).

Вы можете прочитать исходные тексты ядра для получения полной информации, но в основном, если нет неожиданных сигналов, вы выиграли 'не может быть запланировано вообще, за исключением, возможно, небольшого количества вращения в самом началеselect (в качестве оптимизации для случаев, когдаselect может вернуться почти сразу).

В середине вашего резюме вопрос меняется с "являетсяsleep Ресурсоемкие» к "я должен использоватьsleepили cron работа? "

В любом случае, тыне сжигать процессор во время ожидания. Есть некоторые плюсы и минусы, но большинство из них тривиальны. От (грубо и субъективно) наиболее важного к минимуму задания cron:

позволяет конфигурироватьнапример, изменение расписаниябез редактирования исходного кода.требует настройки для работы.означает меньше кодачто означает меньше ошибок и меньше для будущих читателей, чтобы понять.будет сохраняться при выключении системы.сработает снова, даже если ваш скрипт завершится с исключением или сигналом.может сработать 0, 1 или N раз, если его запланированный интервал пропущен N раз (это неt, и разные реализации cron делают разные вещи) вместо гарантированного 0.имеет больше шансов обрабатывать изменения системных часов.должен платить за запуск процесса, запуск интерпретатора и т. д. при каждом запуске.Безразлично»тратить таблицу страниц и табличное пространство процесса, потому что не выполняется ни один процесс и не отображается память.

Нет, это не интенсивно процессор. Это позволяет процессору бездействовать.

В соответствии сдокументация, он приостанавливает выполнение, что означает, что он не загружает процессор.заняты ждать будет интенсивно использовать процессор.

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