我想以特定频率触发事件,例如44100hz。
我希望下面的代码每秒执行“print”44100次,但事实并非如此
import time
frequency = 44100
desired_interval = 1 / frequency
events = 0
time_now = time.time()
time_end = time_now +1
while time_now < time_end:
events += 1
print(events)
# some time has passed, sleep for desired interval less passed time
if( desired_interval > ( time.time() - time_now ) ):
time.sleep( desired_interval - ( time.time() - time_now ) )
time_now = time.time()
这更接近,即使“打印”事件很可能(非常肯定)不是以固定频率触发的
要了解为什么事情花费的时间比您想象的要长,我们必须使用探查器
将代码保存为
timer.py
后,我运行了以下命令:结果是:
所以,在我的机器上,它每秒运行37626次。 大部分时间都花在运行
time.sleep()
问题是,在计算延迟时,您没有考虑python代码运行所需的时间。 它也没有考虑到Python是在运行其他程序的操作系统之上运行的
让我们将程序简化为:
在我的系统上,这大约每秒打印44100次。如你所见,我不得不将睡眠时间减少约30%,以将开销考虑在内。这只是一个玩具程序
查看所需的频率,您似乎希望实时执行CD质量的音频处理。 老实说,Python可能不是这方面的正确选择
你应该做的是把你想做的实际工作包装在一个函数中,然后在这个函数上运行分析器。分析的结果将告诉您是否可以在所需的时间内完成所需的工作
如果你不能,有一些加速的选择
numpy
李>cython
李>pypy
李>相关问题 更多 >
编程相关推荐