2011年9月2日金曜日

python でタイムアウト

SIG ALARMを使ったタイムアウトの仕掛け。再実装するのが嫌なのでメモとして残しておこう。スレッド環境では使えないので注意。
import signal
import time

class timer():
    def __init__(self):
	self.flag = True

    def _handler(self, x, y):
	self.flag = False

    def set(self, sec):
	signal.signal(signal.SIGALRM, self._handler)
	signal.alarm(sec)

    def check(self):
	return self.flag

if __name__ == "__main__":
    tmr = timer()
    tmr.set(3)
    while tmr.check():
	time.sleep(100)