我一直在想办法time.sleep(n)
在python脚本中使用它,以使其在不同的间隔执行作业。伪代码如下所示:
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
处于暂停状态直到信号,超时或准备I /
O(在这种情况下,有没有FDS,因此后者是不可能的)。
您可以阅读内核源代码以获取全部详细信息,但是基本上,除非有任何意外的信号,否则根本不会安排您的计划,除非在开始时可能会进行少量旋转select
(作为对以下情况的优化)select
几乎可以立即返回)。
在您的摘要中间,问题从“ sleep
CPU密集型”变为“我应该使用sleep
,还是cron作业?”
无论哪种方式,您都不会在等待时燃烧任何CPU。有一些优点和缺点,但大多数都是琐碎的。从(大致上和主观上)最重要到最不重要的是,cron工作:
问题内容: 我在某处读到setInterval占用大量CPU的信息。我创建了一个使用setInterval的脚本,并监视了CPU使用率,但没有发现任何变化。我想知道是否有什么我想念的。 代码要做的是每100毫秒检查一次URL中的哈希值(#后面的内容)是否更改,如果更改了,请使用AJAX加载页面。如果未更改,则什么都不会发生。会不会有CPU问题。 问题答案: 我认为不会从本质上引起您严重的性能问题。
问题内容: 我想在我的多线程Python应用程序中定期执行操作。我已经看到了两种不同的方法 要么 一种方法比另一种方法有优势吗?是使用更少的资源还是与其他线程和GIL更好地协作?哪一个使我的应用程序中的其余线程响应更快? (假设有一些外部事件集或,我愿意在关闭时等待完整的延迟) 问题答案: 使用将具有更高的响应速度,因为在设置时,您将立即退出while循环。使用,即使在设置了事件之后,您也将在通话
问题内容: 当我转到页面时,第一个示例是hello world程序。当我在python上运行它时,我看不出与正常的任何区别, 有人可以告诉我区别并举一个简单的例子吗? 我故意将时间从1秒增加到5秒,希望看到一些特别的东西,但我没有。 问题答案: 您不会看到什么特别的东西,因为您的代码中没有太多异步工作。但是,主要区别在于它是阻塞的,并且是非阻塞的。 当被调用时,它会阻止脚本的整个执行,它会被搁置,
问题内容: 这种模式经常出现,但我找不到直接的答案。 一个非关键,不友好的程序可能会 使用其他技术和平台,如果要允许该程序热运行(尽可能多地使用CPU周期),但要有礼貌-允许其他正在热运行的程序有效地降低我的速度,您经常会这样写道: 我已经读到了有关后一种方法是否可以在Linux机器上运行的python上实现我希望的信息的相互矛盾的信息。它会导致上下文切换,导致我上面提到的行为吗? 编辑:对于什么
问题内容: 我可以给它加上浮点数,例如 但是它有多精确?如果我给它 它真的会睡约50毫秒吗? 问题答案: time.sleep函数的准确性取决于你底层操作系统的睡眠准确性。对于非实时操作系统(如普通Windows),你可以睡眠的最小间隔约为10-13毫秒。在最小的10-13毫秒以上的时间里,我已经看到了几毫秒内的准确睡眠。 更新:就像在下面引用的文档中提到的那样,通常以循环方式进行睡眠,以确保在早
描述 (Description) 方法sleep()暂停执行给定的秒数。 参数可以是浮点数,以指示更精确的睡眠时间。 实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。 语法 (Syntax) 以下是sleep()方法的语法 - time.sleep(t) 参数 (Parameters) t - 这是要暂停的执行秒数。 返回值 (Return Va