本文概述
在本教程中, 你将了解Python函数sleep(), 该函数可让你引入程序执行的延迟。这是一个方便的功能, 尤其是当你的程序使用线程或什至使用图形和动画时。睡眠功能在时间模块中可用, 该模块包含许多其他功能, 这些功能处理时间访问和转换。尽管此模块在所有平台上都可用, 但并非其中的所有功能都可用, 甚至不能以完全相同的方式工作。让我们更详细地检查time.sleep()模块…
时间模块
该模块提供的功能有助于控制时间并在程序中使用它们。还有其他”表兄弟”模块可以更精确地与系统中的日期和日历一起使用, 但是此模块更侧重于操纵时间-一直到几小时, 一直到毫秒。
在计算机科学界与时俱进时, 你通常会听到一些名词。
但是首先, 请确保导入时间模块。为此, 只需键入:
import time
时代
这是时间真正开始的确切时间。这并不意味着我们太阳系的诞生, 也并不意味着人类实际上开始测量时间, 而是实际上距现在相对较近。对于UNIX系统, 时期是1970年1月1日, 00:00:00(UTC)(如果你想知道的话, 它是星期四…)要找出系统上的时期, 可以键入:
time.gmtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
这将告诉你年份(tm_year), 月份(tm_mon), 日期(tm_mday), 小时(tm_hour), 分钟(tm_min)和秒(tm_sec)。连同星期几(tm_wday)-这是3, 因为星期一被标记为一周的开始并被计为0。然后是一年中的一天(tm_yday), 也就是儒略日。最后, 夏令时标志(tm_isdst)-DST代表夏令时。如果夏令时无效, 则此字段的值为0, -1或1。0。 1, 如果夏令时有效, 如果没有可用信息, 则最后为-1。你为什么不可用?因为DST规则由当地法律决定, 并且可以更改。
大多数计算机将时间和日期存储为与1970年1月1日00:00:00(UTC)的日期和要存储的时间之间的秒数差。因此, 如果继续输入以下内容:
time.time()
1548611182.872067
这将告诉你自1970年1月1日00:00:00(UTC)起经过的秒数。这种差异就是我们所说的时间戳或UNIX时期, 它采用浮点数的形式。好吧…说实话, 区别不在于秒, 而在于刻度。在大多数UNIX系统中, 时钟每秒”滴答” 50到100次。因此, UNIX纪元时间实际上是自1970年1月1日UTC 00:00:00以来的滴答数。
因此, 现在你已经了解了时间模块的功能。让我们看一下sleep()函数。
time.sleep()
简而言之, time.sleep()将你希望程序停止或暂停之前进入下一步的秒数作为参数。让我们在一个简单的程序的帮助下进行查看, 在该程序中, 我们只需在下一次执行之间暂停5秒即可输出当前时间, 从而在当前时间的每次打印之间引入5秒的时间差。使用time.ctime()有助于查看格式正确的本地时间。
for count in range(5):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(5)
Sun Jan 27 18:46:24 2019
Sun Jan 27 18:46:29 2019
Sun Jan 27 18:46:34 2019
Sun Jan 27 18:46:39 2019
Sun Jan 27 18:46:44 2019
该函数的语法为:time.sleep(sec), 其中sec是用于指定要暂停程序的秒数的参数。该函数不返回任何值。
sec-该参数实际上是一个浮点数, 因此你可以使睡眠时间更加精确。但是, 这有点令人怀疑, 因为实际的暂停时间可能少于请求的时间或任意更长。要了解为什么更好, 请想象该程序是问题还是由商店中其他销售人员处理的任务-当你暂停该程序时, 将立即为该程序的工作人员分配另一个客户。但是不久之后(比指定的睡眠秒数早), 另一个免费的销售人员接手了任务并继续完成任务-因此, 暂停时间可以更少。同样, 由于为车间中所有销售人员安排了任务, 因此暂停时间可能比请求的时间长任意数量, 因此程序必须等待轮到它。在内部, 这当然更复杂, 并且已经介绍了许多处理方法。
for count in range(3):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(2.5)
Sun Jan 27 18:46:49 2019
Sun Jan 27 18:46:52 2019
Sun Jan 27 18:46:54 2019
Python不保证此函数调用的行为, 尤其是跨平台。根本原因是, 此模块中定义的大多数函数都调用具有相同名称的平台C库函数。准确度确实取决于底层操作系统的睡眠准确度, 并且如果你需要进一步查找, 那么最好查看平台文档, 因为这些功能的语义在平台之间会有所不同。
但是, 有一个好消息:从Python 3.5版开始, time.sleep(secs)现在至少要睡眠secs(参数已通过), 即使该睡眠被信号打断了(再次, 假设该信号是一个销售人员, 也就是上面讨论的内容), 除非信号处理程序引发异常。
那么, 使用time.sleep()在内部会发生什么?
本部分旨在使你更好地理解该功能, 但是你不需要开始使用该功能本身。该功能实际上使用系统时钟, 它是计算机中的电子设备, 发出稳定的高频信号, 该信号同步所有内部组件, 并且是处理器的一部分。该模块以可编程的间隔引发所谓的中断请求(IRQ)。 IRQ负责中断处理器正在执行的当前代码, 并在将控制权传递给操作系统中的另一段代码之前保存当前状态。
因此, sleep()函数的作用是调用底层I / O完成例程或异步过程调用来阻止进程。操作系统会指出, 直到达到超时期限, 你才想执行其他任何操作。因此, 一旦达到此超时期限, 操作系统将从它记住的最后一个状态恢复你的进程。从你的角度来看, 对time.sleep()函数进行了简单的调用。
恭喜你掌握了time.sleep()函数。请务必查看srcmini的Python数据科学工具箱(第1部分)课程, 以了解有关Python函数的更多信息。
评论前必须登录!
注册