首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python一边睡觉一边睡觉

python一边睡觉一边睡觉
EN

Stack Overflow用户
提问于 2019-02-09 19:01:48
回答 2查看 154关注 0票数 0

我是一个非常新的Python程序员,即使我是C#中的一个老程序员,而且我正在尝试开发一个实时时钟,它将用于一个简单秒表的显示器中。

在基本PC上的C#中,我只需要一个简单的循环就可以了。但现在我是在树莓Pi 3 B+和我有一些问题。

这是我的密码:

代码语言:javascript
复制
if __name__ == '__main__':

    try:
        while True:
            now = datetime.datetime.now()
            if now.second != datetime.datetime.now().second:
                print(now)
                time.sleep(0.1)
    except KeyboardInterrupt:
        pass

预期的输出是每秒一条新行,但它不是:

代码语言:javascript
复制
2019-02-09 19:33:56.999996
2019-02-09 19:33:57.999999
2019-02-09 19:33:58.999998
2019-02-09 19:34:00.999989
2019-02-09 19:34:01.999999
2019-02-09 19:34:02.999999
2019-02-09 19:34:03.999994
2019-02-09 19:34:07.999989
2019-02-09 19:34:08.999998
2019-02-09 19:34:11.999993
2019-02-09 19:34:12.999993
2019-02-09 19:34:13.999993

正如你所看到的,在19.34.58,它似乎要睡一秒钟,在19.34.08,3秒。

有什么办法可以避免这种情况吗?

如果我试图拦截GPIO中断,问题就更加明显了:事件的时间戳有时会延迟2到3秒。

有什么建议吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 19:22:34

以下几行..。

代码语言:javascript
复制
now = datetime.datetime.now()
if now.second != datetime.datetime.now().second:
    print(now)

..。只有在对now的两个连续调用没有在同一秒钟内停止时,才会打印datetime.datetime.now()

正如您的输出所演示的,如果第二个增量不在这两个调用之间,则有时会失败。

同步计数器

可以像这样构建一个与datetime保持同步的计数器。

代码语言:javascript
复制
import datetime
import time

precision = 0.1

previous = datetime.datetime.now()
while True:
    now = datetime.datetime.now()
    if previous.second != now.second:
        print(now)
        previous = now
    time.sleep(precision)

输出

代码语言:javascript
复制
2019-02-09 14:32:13.070108
2019-02-09 14:32:14.001819
2019-02-09 14:32:15.033610
2019-02-09 14:32:16.065388
2019-02-09 14:32:17.089926
2019-02-09 14:32:18.021687
2019-02-09 14:32:19.053557
票数 1
EN

Stack Overflow用户

发布于 2019-02-09 19:09:25

您太频繁地重置now

代码语言:javascript
复制
while True:
    now = datetime.datetime.now()
    while True: # keep the 'now' until one second ticked by:
        if now.second != datetime.datetime.now().second:
            print(now)
            time.sleep(0.1)
        else:
            break # get the next now ...

任何产出都是幸运的.第二个必须在中间的时间范围内移动。

现在= datetime.datetime.now() #这一行如果now.second != datetime.datetime.now().second:#和这一行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54609671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档