我一直在用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作业是一种可能性。 任何人都有意见吗?
不,这不是CPU密集型的。
该文件说:
暂停执行给定的秒数。
Python实际上不能保证在每一个可能的实现中,这意味着操作系统永远不会在睡眠期间安排你的进程。 但是在每个平台上,Python都会尝试在不使用任何CPU的情况下,在指定的时间内执行相应的操作。 在某些平台上,这可能仍然意味着一点点的CPU,但它将尽可能少地合理。
特别是,因为你问了关于Linux,大概是CPython:
在linux和大多数其他的POSIX平台上,一般会使用select
。 看3.3源 。
手册页清楚地表明select
挂起,直到信号,超时或准备好的I / O(在这种情况下,没有fds,所以后者是不可能的)。
您可以阅读内核源代码以获取完整的细节信息,但基本上,除非出现任何意外的信号,否则根本不会计划安排,除非可能在select
开始时进行少量旋转(作为个案优化select
几乎可以立即返回)。
在你的总结中,问题从“ sleep
CPU密集型”变为“我应该使用sleep
还是cron工作?”
无论哪种方式,您在等待时都不会烧毁任何CPU。 有一些利弊,但其中大部分是微不足道的。 从(大致和主观上)最重要的是至少从事一项cron工作:
不,这不是处理器密集型的。 它让处理器闲置。
根据文档 ,它暂停执行,这意味着它不是处理器密集型的。 繁忙的等待将是处理器密集型的。