原谅我,我是新手。我调查了一些解决方案。但是我很难理解并修改它。 (或者也许没有符合我想象的解决方案?)。我希望它可以在Ubuntu& Win7的。
有一个这样的例子。
public function beforeSave($options = array()) {
if($this->id) {
// Update
} else {
// Add
}
}
我的想象力是......
如果示例()运行超过10秒,则再次重新运行示例()。 (也许有一个地方我可以编写其他任何东西。就像我想在TXT上记录超时事件,我可以在那个地方编写代码。) 否则,什么都不做。
有可能吗?
答案 0 :(得分:2)
你可以在一个单独的线程中运行一个看门狗,当它超过时间限制时,它会中断主线程(运行example
)。这是一种可能的实现,超时降低到3s以便于调试:
import time, threading, thread
def watchdog_timer(state):
time.sleep(3)
if not state['completed']:
thread.interrupt_main()
def run_example():
while True:
state = {'completed': False}
watchdog = threading.Thread(target=watchdog_timer, args=(state,))
watchdog.daemon = True
watchdog.start()
try:
example()
state['completed'] = True
except KeyboardInterrupt:
# this would be the place to log the timeout event
pass
else:
break
答案 1 :(得分:0)
我不确定我是否完全理解你想要实现的目标,但是由于你经常循环并且只有一个简短且可预测的阻塞命令,你可以简单地存储循环开始的时间,然后将它与每循环迭代一次的当前时间。如果差异超出了您的限制,请执行任何操作:
import random,time
time_limit=10
def example():
time_start = time.time() # store current time (seconds since 1970)
while random.randint(0,10) != 1:
time.sleep(1)
if (time.time() >= time_start + time_limit): # compare with current time
print "canceled!"
break # break the while-loop
print "down"
example()