使用Timeit(python)测量背景变化和声音播放的延迟

时间:2012-11-17 01:47:05

标签: python tkinter timeit

我需要弄清楚发送更改背景颜色或播放声音的命令与使用timeit实际发生的这些事件之间的延迟。(我在Windows上,Python 2.73)
我正在做一个反应时间测试,我会在更改背景颜色或播放声音之前记录时间(使用time.clock())。然后,当受试者按下一个键时,我再次记录时间并取差异以找到反应时间 对于声音播放,这就是我所做的:

import timeit
t = timeit.Timer(stmt = "winsound.PlaySound('C:\WINDOWS\media\Windows XP Error.wav', winsound.SND_FILENAME)",setup = "import winsound")
n = t.timeit(number = 100) 
print n/100 -0.999  

0.999是 Windows XP Error.wav 的持续时间(秒) 这给了我56ms的东西。我不确定它是否合理,是否正确的方式,以及我是否应该启用垃圾收集?


对于背景变化,我遇到了更多问题。由于我在全屏模式下进行测试,我尝试将所有这些放入设置参数中:

from Tkinter import Tk
root=Tk()
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(),root.winfo_screenheight()))
root.mainloop()

即使我将它们全部分开;我仍然会遇到语法错误。当我尝试不全屏时 setup = 'from Tkinter import Tk; root=Tk(); root.mainloop()'窗口实际打开,但没有任何反应,如果我关闭它,我会看到其他错误。Invalid command name "."
我实际测量的陈述是root.configure(background='red')

1 个答案:

答案 0 :(得分:1)

以下是创建与timeit一起使用的多行设置字符串的方法示例:

setup = """
import random
l1 = [random.randrange(100) for _ in xrange(100)]
l2 = [random.randrange(100) for _ in xrange(10)]
"""

这是另一个提示。为了获得准确的测量结果,按照这种基本模式计算时间非常重要:

time = min(timeit.repeat(statements, setup=setup, repeat=R, number=N))

R至少为3(R = 3)。这需要通过三次完成所有操作获得的最快值,这将消除由于系统在后台运行的许多其他因素而产生的差异。

这不能回答你的整个问题,但可能对你的任务有帮助。