使用 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)
我想使用恰好 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)