时间不准确或代码效率低下?
Time Inaccuracy or Inefficient Code?
我目前正在开发一个程序,该程序将显示自特定时间点以来经过的时间量。秒表,如果你愿意的话。
我的代码终于可以运行了,但事实证明,它不是很准确。它落后得非常快,在 运行 的前 10 秒内落后 1 秒甚至 2 秒,我不完全确定这是为什么。
# Draw
def draw():
stdscr.erase()
stdscr.border()
# Debugging
if debug:
stdscr.addstr(5 , 3, "running : %s " % running )
stdscr.addstr(6 , 3, "new : %s " % new )
stdscr.addstr(7 , 3, "pureNew : %s " % pureNew )
stdscr.addstr(8 , 3, "paused : %s " % paused )
stdscr.addstr(9 , 3, "complete : %s " % complete )
stdscr.addstr(10, 3, "debug : %s " % debug )
if running:
stdscr.addstr(1, 1, ">", curses.color_pair(8))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", t.gmtime( timeElapsedTotal ) ) )
elif not running:
if new and pureNew:
stdscr.addstr(1, 1, ">", curses.color_pair(5))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", timeNone ) )
elif paused:
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", t.gmtime( timeElapsedTotal ) ), curses.color_pair(1) )
stdscr.addstr(1, 1, ">", curses.color_pair(3))
else:
stdscr.addstr(1, 1, ">", curses.color_pair(5))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", timeNone ) )
stdscr.redrawwin()
stdscr.refresh()
return
# Calculations
def calc():
global timeElapsedTotal
if running:
timeElapsedTotal = t.clock() - timeStart
return
# Main Loop
while True:
# Get input from the user
kInput = stdscr.getch()
# If q is pressed we close the program
if kInput == ord('q'):
endProg()
# If d is pressed we toggle 'debug' mode
elif kInput == ord('d'):
debug = not debug
# If s is pressed we stop the current run
elif kInput == ord('s'):
running = False
new = True
# If spacebar is pressed and we are ready for a new run,
# we start a new run
elif kInput == ord(' ') and new:
running = not running
new = not new
pureNew = False
timeStart = t.clock()
# If p is pressed and we are in the middle of a run,
# we pause the run
elif kInput == ord('p') and not new:
running = not running
paused = not paused
timeStart = t.clock() - timeStart
calc()
draw()
据我所知,上面的代码是按预期工作的。我不确定延迟是来自 time.clock()
还是我的低效代码。这是我需要使用线程的工作吗?
我用谷歌搜索了一下,看到其他人在谈论时间模块中的其他功能,但 none 对我来说效果更好。
如果信息不够或我犯了一个简单的错误,请告诉我。
事实证明,按照 tdelaney 的建议,解决方案非常简单,只需将 time.clock()
更改为 time.time()
。
看来我需要在使用模块时更彻底地阅读它们。谢谢指点。
我目前正在开发一个程序,该程序将显示自特定时间点以来经过的时间量。秒表,如果你愿意的话。
我的代码终于可以运行了,但事实证明,它不是很准确。它落后得非常快,在 运行 的前 10 秒内落后 1 秒甚至 2 秒,我不完全确定这是为什么。
# Draw
def draw():
stdscr.erase()
stdscr.border()
# Debugging
if debug:
stdscr.addstr(5 , 3, "running : %s " % running )
stdscr.addstr(6 , 3, "new : %s " % new )
stdscr.addstr(7 , 3, "pureNew : %s " % pureNew )
stdscr.addstr(8 , 3, "paused : %s " % paused )
stdscr.addstr(9 , 3, "complete : %s " % complete )
stdscr.addstr(10, 3, "debug : %s " % debug )
if running:
stdscr.addstr(1, 1, ">", curses.color_pair(8))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", t.gmtime( timeElapsedTotal ) ) )
elif not running:
if new and pureNew:
stdscr.addstr(1, 1, ">", curses.color_pair(5))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", timeNone ) )
elif paused:
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", t.gmtime( timeElapsedTotal ) ), curses.color_pair(1) )
stdscr.addstr(1, 1, ">", curses.color_pair(3))
else:
stdscr.addstr(1, 1, ">", curses.color_pair(5))
stdscr.addstr(1, 3, t.strftime( "%H:%M.%S", timeNone ) )
stdscr.redrawwin()
stdscr.refresh()
return
# Calculations
def calc():
global timeElapsedTotal
if running:
timeElapsedTotal = t.clock() - timeStart
return
# Main Loop
while True:
# Get input from the user
kInput = stdscr.getch()
# If q is pressed we close the program
if kInput == ord('q'):
endProg()
# If d is pressed we toggle 'debug' mode
elif kInput == ord('d'):
debug = not debug
# If s is pressed we stop the current run
elif kInput == ord('s'):
running = False
new = True
# If spacebar is pressed and we are ready for a new run,
# we start a new run
elif kInput == ord(' ') and new:
running = not running
new = not new
pureNew = False
timeStart = t.clock()
# If p is pressed and we are in the middle of a run,
# we pause the run
elif kInput == ord('p') and not new:
running = not running
paused = not paused
timeStart = t.clock() - timeStart
calc()
draw()
据我所知,上面的代码是按预期工作的。我不确定延迟是来自 time.clock()
还是我的低效代码。这是我需要使用线程的工作吗?
我用谷歌搜索了一下,看到其他人在谈论时间模块中的其他功能,但 none 对我来说效果更好。
如果信息不够或我犯了一个简单的错误,请告诉我。
事实证明,按照 tdelaney 的建议,解决方案非常简单,只需将 time.clock()
更改为 time.time()
。
看来我需要在使用模块时更彻底地阅读它们。谢谢指点。