我正在爲我朋友的班級做一個簡單的數學考試。學生將只有45秒來解答每個答案。有沒有一種方法可以讓計時器與其餘代碼運行同時計數並達到45次停止?如何讓定時器與Python中的其他代碼同時運行?
測試看起來是這樣的:
test = raw_input("How much is 62x5-23?")
if test == '287':
print "Well done!"
我正在爲我朋友的班級做一個簡單的數學考試。學生將只有45秒來解答每個答案。有沒有一種方法可以讓計時器與其餘代碼運行同時計數並達到45次停止?如何讓定時器與Python中的其他代碼同時運行?
測試看起來是這樣的:
test = raw_input("How much is 62x5-23?")
if test == '287':
print "Well done!"
下面是一些代碼,我使用一次(剝離部分頁面現在是在一個域中棚戶手中的網絡上,所以沒有信貸,信用是因爲,黯然):
import signal
class TimeoutException(Exception):
pass
def timeout(timeout_time, default = None):
def timeout_function(f):
def f2(*args, **kwargs):
def timeout_handler(signum, frame):
raise TimeoutException()
old_handler = signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(timeout_time) # triger alarm in timeout_time seconds
try:
retval = f(*args, **kwargs)
except TimeoutException, e:
if default == None:
raise e
return default
finally:
signal.signal(signal.SIGALRM, old_handler)
signal.alarm(0)
return retval
return f2
return timeout_function
# use like this:
@timeout(45)
def run():
test = raw_input("How much is 62x5-23? ")
if test == '287':
print "Well done!"
# alternatively, pass a value that will be returned when the timeout is reached:
@timeout(45, False)
def run2():
test = raw_input("How much is 62x5-23? ")
if test == '287':
print "Well done!"
if __name__ == '__main__':
try:
run()
except TimeoutException:
print "\nSorry, you took too long."
# alternative call:
if run2() == False:
print "\nSorry, you took too long."
編輯:可能適用於僅Unix類型OS'es。
我在空閒狀態下複製並粘貼了代碼,但沒有奏效。我是Python新手,所以有一點解釋會非常感謝。謝謝! – VagosLabrou
@VagosLabrou你有沒有在Windows上運行Python?我不知道它是否可以在Windows上工作(信號更像是Unix的東西)。 – robertklep
是的,我正在使用Windows。 – VagosLabrou
這可能有助於http://stackoverflow.com/http://stackoverflow.com/questions/18950092/using-countdown-timer-to-jump-out-of-while-loop-python –
希望這有助於:http://stackoverflow.com/問題/ 12435211/python-threading-timer-repeat-function-every-n-seconds –