我一直在考虑在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作业是可能的。有人对这两者有意见吗?
不,它不是处理器密集型的。它让处理器空闲。
根据the documentation,它暂停执行,这意味着它不是处理器密集型的。一个busy wait将是处理器密集型的。
不,它不是CPU密集型的。
The documentation说:
Python实际上不能保证在每一个可能的实现中,这意味着操作系统永远不会在睡眠期间调度您的进程。但是在每一个平台上,Python都试图做一些适当的事情,在指定的时间内阻塞,而不使用任何CPU。在某些平台上,这可能仍然意味着一点CPU,但它将尽可能少。
特别是,既然你问过linux,大概还有CPython:
在linux和大多数其他POSIX平台上,它通常使用
select
。见the 3.3 source。man page非常清楚地表明,
select
一直挂起,直到信号、超时或准备好I/O(在本例中,没有FD,因此后者是不可能的)。您可以阅读内核源代码以获得完整的详细信息,但基本上,除非有任何意外的信号,否则根本不会安排您的日程,除了在
select
开始时可能有少量的旋转(作为对select
几乎可以立即返回的情况的优化)。在总结过程中,问题从“是
sleep
CPU密集型”变为“我应该使用sleep
还是cron作业?”不管怎样,你在等的时候不会烧掉任何CPU。有一些优点和缺点,但大多数都是微不足道的。从(大体上,主观上)最重要到最不重要的cron作业:
相关问题 更多 >
编程相关推荐