我一直在想着在python脚本中使用time.sleep(n)
来让它以不同的间隔执行作业。伪代码看起来像:
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作业是可能的。任何人都有意见?
答案 0 :(得分:29)
不,它不是CPU密集型。
暂停执行指定的秒数。
Python实际上无法保证在每个可能的实现中,这意味着操作系统永远不会在睡眠期间安排您的进程。但是在每个平台上,Python都会尝试在不使用任何CPU的情况下执行适当的操作以阻止指定的时间。在某些平台上,这可能仍然意味着一点点CPU,但它将尽可能少。
特别是,因为你问过linux,大概是CPython:
在Linux和大多数其他POSIX平台上,它通常会使用select
。请参阅the 3.3 source。
man page非常清楚select
暂停,直到信号,超时或就绪I / O(在这种情况下,没有fds,所以后者是不可能的)。
您可以阅读内核源代码以获取完整的详细信息,但基本上,除非有任何意外信号,否则根本不会安排,除非在select
开始时可能会进行少量旋转。 (作为select
几乎可以立即返回的情况的优化)。
在摘要的中间,问题从“sleep
CPU密集型”更改为“我应该使用sleep
还是cron作业?”
无论哪种方式,你都不会在等待时刻录任何CPU。有一些优点和缺点,但大多数都是微不足道的。从(粗略地,主观地)最重要的,至少是一个cron工作:
答案 1 :(得分:4)
不,它不是处理器密集型的。它让处理器空闲。
根据the documentation,它暂停执行,因此这意味着它不是处理器密集型的。 busy wait将是处理器密集型的。