<p>不,它不是CPU密集型的。</p>
<p><a href="http://docs.python.org/3/library/time.html#time.sleep">The documentation</a>说:</p>
<blockquote>
<p>Suspend execution for the given number of seconds.</p>
</blockquote>
<p>Python实际上不能保证在每一个可能的实现中,这意味着操作系统永远不会在睡眠期间调度您的进程。但是在每一个平台上,Python都试图做一些适当的事情,在指定的时间内阻塞,而不使用任何CPU。在某些平台上,这可能仍然意味着一点CPU,但它将尽可能少。</p>
<p>特别是,既然你问过linux,大概还有CPython:</p>
<p>在linux和大多数其他POSIX平台上,它通常使用<code>select</code>。见<a href="http://hg.python.org/cpython/file/3.3/Modules/timemodule.c#l1523">the 3.3 source</a>。</p>
<p><a href="http://linux.die.net/man/2/select">man page</a>非常清楚地表明,<code>select</code>一直挂起,直到信号、超时或准备好I/O(在本例中,没有FD,因此后者是不可能的)。</p>
<p>您可以阅读内核源代码以获得完整的详细信息,但基本上,除非有任何意外的信号,否则根本不会安排您的日程,除了在<code>select</code>开始时可能有少量的旋转(作为对<code>select</code>几乎可以立即返回的情况的优化)。</p>
<hr/>
<p>在总结过程中,问题从“是<code>sleep</code>CPU密集型”变为“我应该使用<code>sleep</code>还是cron作业?”</p>
<p>不管怎样,你在等的时候不会烧掉任何CPU。有一些优点和缺点,但大多数都是微不足道的。从(大体上,主观上)最重要到最不重要的cron作业:</p>
<ul>
<li>允许配置,例如,在不编辑源代码的情况下更改计划。</li>
<li>需要配置才能工作。</li>
<li>意味着更少的代码意味着更少的bug,也意味着未来的读者理解的更少。</li>
<li>将在系统关闭期间持续。</li>
<li>即使脚本以异常或信号退出,也将再次激发。</li>
<li>如果它的调度间隔错过N次(未指定,并且不同的cron实现执行不同的操作),则可能会触发0、1或N次,而不是保证0。</li>
<li>有更好的机会处理系统时钟的变化。</li>
<li>每次启动都要为进程启动、解释器启动等支付费用。</li>
<li>不会浪费页表和进程表空间,因为没有进程正在运行,也没有内存映射。</li>
</ul>