timeout-decorator を使ってタイムアウトする

python で簡単にタイムアウトを設定できるので覚えておく。

$ emacs -nw ./timeout_decorator_test.py

して、以下のように書く。

import sys
import time
from timeout_decorator import timeout, TimeoutError


class TimeoutDecoratorTest(object):
   def test(self, sleep_sec, timeout_sec):
       @timeout(timeout_sec)
       def inner_test():
           print("Start sleep " + str(sleep_sec) + " seconds.")
           print("Timeout in " + str(timeout_sec) + " seconds.")
           time.sleep(sleep_sec)
       try:
           inner_test()
           print("End sleep.")
       except TimeoutError:
           print("Timeout!")


if __name__ == '__main__':
   sleep_sec = int(sys.argv[1])
   timeout_sec = int(sys.argv[2])
   t = TimeoutDecoratorTest()
   t.test(sleep_sec, timeout_sec)

これで

$ python ./timeout_decorator_test.py 1 2
Start sleep 1 seconds.
Timeout in 2 seconds.
End sleep.
$ python ./timeout_decorator_test.py 4 3
Start sleep 4 seconds.
Timeout in 3 seconds.
Timeout!

こうなる。

以上。

参考: https://qiita.com/komorin0521/items/0ca7eacb7ae9424fc6c4
https://pypi.org/project/timeout-decorator/

この記事が気に入ったらサポートをしてみませんか?