不,它不是 CPU 密集型的。
文档说:
在给定的秒数内暂停执行。
Python 实际上不能保证在所有可能的实现中,这意味着操作系统永远不会在睡眠期间安排您的进程。但是在每个平台上,Python 都会尝试在不使用任何 CPU 的情况下做一些适当的事情来阻塞指定的时间。在某些平台上,这可能仍然意味着一点点 CPU,但它会尽可能少。
特别是,既然您询问了 linux,大概是 CPython:
在 linux 和大多数其他 POSIX 平台上,它通常会使用select
. 见3.3 源码。
手册页清楚地说明了挂起select
直到信号、超时或准备好 I/O(在这种情况下,没有 fds,所以后者是不可能的)。
您可以阅读内核源代码以获取完整的详细信息,但基本上,除非有任何意外信号,否则您根本不会被安排,除了可能在开始时进行少量旋转select
(作为对以下情况的优化)select
几乎可以立即返回)。
在您的摘要中间,问题从“ sleep
CPU 密集型”变为“我应该使用sleep
还是 cron 作业?”
无论哪种方式,您都不会在等待时消耗任何 CPU。有一些优点和缺点,但大多数都是微不足道的。从(粗略地,主观地)最重要到最不重要,一个 cron 工作:
- 允许在不编辑源代码的情况下进行配置(例如更改计划)。
- 需要配置才能工作。
- 意味着更少的代码——意味着更少的错误,也意味着更少的未来读者可以理解。
- 将在系统关闭期间持续存在。
- 即使您的脚本以异常或信号退出,也会再次触发。
- 如果错过了 N 次(未指定,并且不同的 cron 实现做不同的事情),则可能会触发 0、1 或 N 次,而不是保证 0。
- 有更好的机会处理系统时钟的变化。
- 每次触发时都必须为进程启动、解释器启动等付费。
- 不会浪费页表和进程表空间,因为没有进程在运行,也没有内存映射。