python 一定時間で処理が終了しなければ，次の処理に移るようなコード


はじめまして．  
私は今pythonでプログラミングの勉強をしております．

タイトルのように，  
ある処理が一定時間で終了しなければ，次の処理に移るようなコードを作成したいと思っております．

[code]

    for value in values:
      # valueについて処理1
      # valueについて処理2
      # valueについて処理3
    
[/code]

この，valueについての処理が一定時間に終わらなければ再処理するにはどうしたらよいでしょうか？

できれば高精度で処理を中断したいので，valueについての処理中にも監視したいです．

そこで，スレッドを生成して監視すればよいかとも思ったのですが，処理が終了しているかどうかの監視や，再処理の仕方がわかりませんでした．

なにか解決方法ありましたら，教えてください．  
よろしくお願いいたします．




やり方はいろいろあると思うのです。マルチプロセスでもマルチスレッドでも  
水車の再発明は避けたいので、ありもののライブラリを利用するのはいかがでしょうか。  
「タイムアウトさせたい処理」メソッドないしは関数で定義すれば、実現できそうですが。。。

<https://qiita.com/toshitanian/items/133b42355b7867f5c458>[](https://qiita.com/toshitanian/items/133b42355b7867f5c458)




今回，コメントにあったtimeout-decoratorを参考にさせて頂きました．  
再処理にはretryというパッケージで実現いたしました．  
何かの参考になりますと幸いです．

[code]

    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")
    
[/code]

