我一直在想办法time.sleep(n)在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
总而言之,程序将hibernate直到需要执行下一个作业。它运行该作业,找到要运行的下一个作业,然后hibernate直到需要运行下一个作业(继续到无穷大)。我打算在Linux机器上运行它- 使用cron作业是可能的。有人对此有意见吗?
不,它不占用CPU。
该文件说:
暂停执行指定的秒数。
Python实际上不能保证在每种可能的实现中,这意味着OS永远不会在睡眠期间调度您的进程。但是在每个平台上,Python都尝试在指定的时间内执行适当的操作以在不使用任何CPU的情况下进行阻塞。在某些平台上,这可能仍意味着需要一点CPU,但它将在合理范围内尽可能减少。
特别是,由于您询问了linux,大概是CPython,所以:
在linux和大多数其他POSIX平台上,通常会使用select。请参阅3.3源。
select
该手册页使得它很清楚,select处于暂停状态直到信号,超时或准备I / O(在这种情况下,有没有FDS,因此后者是不可能的)。
您可以阅读内核源代码以获取全部详细信息,但是基本上,除非有任何意外的信号,否则根本不会安排您的计划,除非在开始时可能会进行少量旋转select(作为对以下情况的优化)select几乎可以立即返回)。
在您的摘要中间,问题从“ sleepCPU密集型”变为“我应该使用sleep,还是cron作业?”
sleep
无论哪种方式,您都不会在等待时燃烧任何CPU。有一些优点和缺点,但大多数都是琐碎的。从(大致上和主观上)最重要到最不重要的是,cron工作: