例如我有函数do_something(),我希望它运行正好1秒(而不是.923秒。它不会。但是0.999是可以接受的。)
然而,do_something
必须完全运行1秒非常非常重要。我在考虑使用UNIX时间戳并计算秒数。但我真的很想知道Python是否有办法以更美观的方式做到这一点......
函数do_something()
是长时间运行的,必须在一秒钟后中断。
答案 0 :(得分:2)
我从评论中得知,这里有一个while
循环。这是一个基于Thread
模块中_Timer
源代码的threading
子类。我知道你说你决定反对线程,但这只是一个定时器控制线程; do_something
在主线程中执行。所以这应该是干净的。 (如果我错了,有人会纠正我!):
from threading import Thread, Event
class BoolTimer(Thread):
"""A boolean value that toggles after a specified number of seconds:
bt = BoolTimer(30.0, False)
bt.start()
bt.cancel() # prevent the booltimer from toggling if it is still waiting
"""
def __init__(self, interval, initial_state=True):
Thread.__init__(self)
self.interval = interval
self.state = initial_state
self.finished = Event()
def __nonzero__(self):
return bool(self.state)
def cancel(self):
"""Stop BoolTimer if it hasn't toggled yet"""
self.finished.set()
def run(self):
self.finished.wait(self.interval)
if not self.finished.is_set():
self.state = not self.state
self.finished.set()
你可以像这样使用它。
import time
def do_something():
running = BoolTimer(1.0)
running.start()
while running:
print "running" # Do something more useful here.
time.sleep(0.05) # Do it more or less often.
if not running: # If you want to interrupt the loop,
print "broke!" # add breakpoints.
break # You could even put this in a
time.sleep(0.05) # try, finally block.
do_something()
答案 1 :(得分:1)
Python的'sched'模块看起来合适:
http://docs.python.org/library/sched.html
除此之外:Python不是实时语言,也不是通常在实时操作系统上运行。所以你的要求有点可疑。
答案 2 :(得分:1)