Page List

Search on the blog

2016年4月28日木曜日

便利なPythonライブラリ(5)retry

デコレータつけるだけで、リトライしてくれるという便利ライブラリ。

インストール
$ pip install retry

サンプル
失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。
from retry import retry
from random import randint

def unreliable_func(x):
    if randint(0, 10) == 0:
        return x*x
    raise Exception("Sorry, I'm busy.")

@retry()
def solve(x):
    return unreliable_func(x)

def main():
    ret = solve(10)
    print (ret)

if __name__ == '__main__':
    main()

もう少し実用的な例。
クローラを書いた時に、エラーが起きたら再トライみたいなことをしたい場合も@retryが使える。以下のサンプルでは、
  • 最大4回トライする(4回実行してすべてエラーだったらエラーとする)
  • トライの間隔は、5秒から始めて、10秒、20秒と2倍ずつ増やしていく
という条件でリトライしている。
from retry import retry
import urllib.request

@retry(tries=4, delay=5, backoff=2)
def crawl_url(url):
    print ("crawling...")
    f = urllib.request.urlopen(url)
    return f.read()

def main():
    ret = crawl_url("http://kenjih.com")
    print (len(ret))

if __name__ == '__main__':
    main()

0 件のコメント:

コメントを投稿