例如,我有函數do_something(),我希望它運行正好1秒(而不是.923秒,但不會,但0.999是可以接受的。)如何在Python中的特定時間運行某個函數?
但是,它非常重要do_something
必須正好運行1秒。我正在考慮使用UNIX時間戳並計算秒數。但我真的想知道Python是否有辦法以更美觀的方式做到這一點...
函數do_something()
是長時間運行的,並且必須在一秒鐘後中斷。
例如,我有函數do_something(),我希望它運行正好1秒(而不是.923秒,但不會,但0.999是可以接受的。)如何在Python中的特定時間運行某個函數?
但是,它非常重要do_something
必須正好運行1秒。我正在考慮使用UNIX時間戳並計算秒數。但我真的想知道Python是否有辦法以更美觀的方式做到這一點...
函數do_something()
是長時間運行的,並且必須在一秒鐘後中斷。
Python中的「附表」模塊出現適合:
http://docs.python.org/library/sched.html
從除了:Python是不是實時的語言,也沒有通常在實時操作系統上運行。所以你的要求是有問題的。
我從收集的意見,有一個while
循環在這裏的某個地方。根據threading
模塊中_Timer
的源代碼,此類是Thread
的子類。我知道你說你決定不使用線程,但這只是一個計時器控制線程; 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()
哇!它看起來像我正在尋找的!其實是!謝謝! – JohnRoach
將它取不到一秒,總是和你需要墊呢?它會花費超過一秒鐘,你想減少它? – chmullig
請澄清你的問題。你想(a)一次運行'do_something'一次,然後中斷它,或者(b)你想重複運行'do_something'直到1秒過去,或者(c)你想運行' do_something'重複,直到1秒鐘過去*和*中斷最近執行1秒鐘後通過? – phooji
沒有do_something()函數只是做了一些事......但它只能做它只做了一秒的事情。如果它是1秒,它必須切斷它正在做的事情。 – JohnRoach