python 使用datetime和%运算符每n秒打印一次

23c0lvtd  于 2023-01-01  发布在  Python
关注(0)|答案(2)|浏览(184)

我如何在使用%操作符和datetime包的基础上每10秒打印一次时间?这只打印一次...

from datetime import datetime, timezone, timedelta
import time

now_utc = datetime.now(timezone.utc)

while True:
    if (now_utc - datetime.now(timezone.utc)).total_seconds() % 10 == 0:
        print(time.ctime())
gc0ot86w

gc0ot86w1#

要每隔10秒打印一次时间,可以使用time模块中的sleep()函数将循环暂停所需的时间间隔。

import time
from datetime import datetime, timezone

while True:
    now_utc = datetime.now(timezone.utc)
    if (now_utc - datetime.now(timezone.utc)).total_seconds() % 10 == 0:
        print(time.ctime())
    time.sleep(10)
rkue9o1l

rkue9o1l2#

在答复关于这个问题的评论时:你可以不用datetime%来完成这个任务,好处是它要简单得多。

import time

POLLING_PERIOD = 0.1 #  seconds

if __name__ == '__main__':
    prev_time = time.time()
    print(time.ctime())
    while True:
        cur_time = time.time()
        if cur_time - prev_time >= 10:
            prev_time = cur_time
            print(time.ctime())
        time.sleep(POLLING_PERIOD)

此脚本从Unix epoch获取秒数,并每10秒打印一次当前时间。您可以调整轮询周期以最小化旋转,并确保仅每10秒打印一次时间,而不是每11秒、12秒等打印一次,因为分辨率较差。
请注意,由于time.sleep()的不准确性,该脚本容易发生漂移,最终打印的时间将比上次打印时间长10秒。
在低负载的系统上运行一些实验之后,如果根据前一时间和当前时间之间的差异调整睡眠时间,time.sleep()在几个小时内的性能非常好。

import time

REPORTING_INTERVAL = 10  # seconds

if __name__ == '__main__':
    prev_time = time.time()
    sleep_time_adj = 0
    print(time.ctime())
    while True:
        time.sleep(REPORTING_INTERVAL - sleep_time_adj)
        print(time.ctime())
        cur_time = time.time()
        sleep_time_adj = cur_time - prev_time - REPORTING_INTERVAL
        prev_time = cur_time

这实际上取决于它需要有多精确,它要运行多长时间,以及它将在哪个系统上运行。

相关问题