如何从微秒分配条件循环?

时间:2019-01-07 14:50:12

标签: python datetime

我有一个非常简单的代码,该代码应该在当前时间的每微秒为2或每秒一次时输出“ 2”。但是,当我运行此代码时,它不返回任何内容。我该如何解决?

import datetime
while True:
    if datetime.datetime.now().microsecond == 2:
        print (datetime.datetime.now().microsecond)

1 个答案:

答案 0 :(得分:3)

您不能可靠地建立一个仅在当前时间的微秒数等于2的点每秒精确打印一次的循环。

计算机时钟不一定每隔一个微秒就会滴答一声,Python也不总是足够快地在给定的微秒内生成datetime实例。在许多系统上,一次调用datetime.now()会在几毫秒内产生完全相同的值,一直到每秒只产生一个新的,截然不同的时间。您的代码还会创建多个datetime对象,因此在测试microsecond属性后,调用print()时创建的下一个对象很容易具有较高的microsecond值。 / p>

请参阅time module,其中详细介绍了可用时钟。 datetime使用与time.time相同的时钟:

  

各种实时函数的精度可能比表示其值或自变量的单位所建议的精度低。例如。在大多数Unix系统上,时钟每秒仅滴答50或100次。

  

请注意,即使始终将时间作为浮点数返回,但并非所有系统都提供比1秒更好的精度的时间。虽然此函数通常返回非递减值,但如果两次调用之间的系统时钟都已设置回去,则它可以返回比上一个调用更低的值。

系统时钟的精度取决于操作系统和计算机硬件。时钟的分辨率无关紧要(时钟值中可以提供多少信息),而是刷新该值的频率。

如果您希望将打印时间限制为每秒一次,只需跟踪上次打印时间,并确保新的时间至少晚一秒钟:

import datetime

last = datetime.datetime.now()
while True:
    now = datetime.datetime.now()
    if (now - last).total_seconds() >= 1:
        print(now)