使用 python 创建时钟脉冲

Create clock pulse with python

我想使用恰好 20 毫秒的睡眠时间。当我使用 time.sleep(0.02) 时,我遇到了很多问题。它不工作我想要的。如果我必须举个例子;

import time
i = 0
end = time.time() + 10
while time.time() < end:
    i += 1
    time.sleep(0.02)
    print(i)

我们等着看控制台中的“500”。但它就像“320”。这是一个巨大的差异。因为睡眠时间不是真实的,每次睡眠时间都会出现小的偏差。它正在累积增加,我们看到错误的结果。

然后,我想为时钟脉冲创建新项目。 time.time() 有可能吗?

import time
first_time = time.time() * 100 #convert seconds to 10 * miliseconds
first_time = int(first_time) #convert integer

first_if = first_time
second_if = first_time + 2 #for sleep 20ms
third_if = first_time + 4 #for sleep 40ms
fourth_if = first_time + 6 #for sleep 60ms
fifth_if = first_time + 8 #for sleep 80ms

end = time.time() + 8
i = 0
while time.time() < end:
    now = time.time() * 100 #convert seconds to 10 * miliseconds
    now = int(now) #convert integer

    if i == 0 and (now == first_if or now > first_if):
        print('1_' + str(now))
        i = 1
    if i == 1 and (now == second_if or now > second_if):
        print('2_' + str(now))
        i = 2
    if  i == 2 and (now == third_if or now > third_if):
        print('3_' + str(now))
        i = 3
    if i == 3 and (now == fourth_if or now > fourth_if):
        print('4_' + str(now))
        i = 4
    if i == 4 and (now == fifth_if or now > fifth_if):
        print('5_' + str(now))
        break

Out >> 1_163255259009
       2_163255259011
       3_163255259013
       4_163255259015
       5_163255259017

这个项目是真的逻辑吗?如果这是真正的逻辑,如何用真正的循环来完成这个项目? 因为我希望这些睡眠一直发生。谢谢指教。

假设您想以 20 毫秒为增量进行计数。您需要为循环中不是比较、递增和打印的部分休眠。这些操作需要时间,根据您的发现可能需要大约 10 毫秒。

如果你想循环执行,你不能硬编码所有可能的结束时间。你需要做一些更一般的事情,比如取余数。

从循环前的时间开始:

t0 = time.time()
while time.time() < end:
    i += 1

现在您需要算出睡眠时间,以便 t0 和睡眠结束之间的时间是 20 毫秒的倍数。

(time.time() - t0) % 0.02 告诉您距离 20 毫秒的增量还有多远,因为 python 方便地支持浮点模。然后等待的时间是

    time.sleep(0.02 - (time.time() - t0) % 0.02)
    print(i)

使用%的符号规则,可以将计算减少到

    time.sleep(-(time.time() - t0) % 0.02)