質問: はじめまして. 私は今pythonでプログラミングの勉強をしております. タイトルのように, ある処理が一定時間で終了しなければ,次の処理に移るようなコードを作成したいと思っております. ``` for value in values: # valueについて処理1 # valueについて処理2 # valueについて処理3 ``` この,valueについての処理が一定時間に終わらなければ再処理するにはどうしたらよいでしょうか? できれば高精度で処理を中断したいので,valueについての処理中にも監視したいです. そこで,スレッドを生成して監視すればよいかとも思ったのですが,処理が終了しているかどうかの監視や,再処理の仕方がわかりませんでした. なにか解決方法ありましたら,教えてください. よろしくお願いいたします.
回答: 今回,コメントにあったtimeout-decoratorを参考にさせて頂きました. 再処理にはretryというパッケージで実現いたしました. 何かの参考になりますと幸いです. ``` import time import random from retry import retry from timeout_decorator import timeout, TimeoutError class Test(): @retry(TimeoutError, tries=3, delay=1, backoff=2) @timeout(5) def worker(value):#valueの処理 print (value), #1~10秒待つ. sleep_time = random.randrange(1, 10) print (":sleep_time", sleep_time) time.sleep(sleep_time) print(value, ":Done.") if __name__ == "__main__": values = [1, 2, 3] for value in values: Time = time.time() try: worker(value) except TimeoutError as e: print (e) finally: print("掛った時間", time.time() - Time) print ("Finish") ```