用python创建时钟脉冲
Posted
技术标签:
【中文标题】用python创建时钟脉冲【英文标题】:Create clock pulse with python 【发布时间】:2021-11-18 06:31:08 【问题描述】:我想使用 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
这个项目是真的逻辑吗?如果是真正的逻辑,如何才能用真正的循环完成这个项目? 因为我希望这些睡眠一直发生。谢谢你的建议。
【问题讨论】:
考虑一下,不是一个人睡觉,而是搞砸了。您正在同一个循环中运行一些其他慢速代码,例如打印语句。 【参考方案1】:假设您想以 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)
【讨论】:
感谢您的建议。它似乎工作正常,但与我想要的不完全相同。我们正在使用模数,它每次都小于我们的睡眠时间。这是非常混乱的。例如; reel_sleep_time = 0.5 - (time.time() - t0) % 0.5 time.sleep(reel_sleep_time) print(str(i) + '_' + str(reel_sleep_time)) 输出 >> 1_0.5 2_0.4918181896209717 3_0.4845738410949707 4_0 .4933152198791504 5_0.4907896518704141408504754 7_0.49075212618074140874707 414074707 10_0.496349811407107 10_0.4963498115539551我们不能说500ms时钟脉冲。 span> @GökhanArman。当然不是。您在运行解释语言的多进程、多用户机器上。这不是您可以拥有的控制级别。我也习惯了嵌入式系统,在那里你可以做得更好,但不是用 python。以上是关于用python创建时钟脉冲的主要内容,如果未能解决你的问题,请参考以下文章