Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

Pythonでhourglassメモ

2ちゃんのPythonスレッドみてたら、おおー面白い、というコードがあったので、勝手にまとめてスレから転載してみました。転載元
時間のかかる処理をしてる間、1秒おきにピリオドを表示する、というコードです。

# -*- coding: cp932 -*-
import sys, time, threading

class myThread(threading.Thread):
    alive = True
    def run(self):
        while self.alive:
            sys.stdout.write('.')
            time.sleep(1)
    def kill(self):
        self.alive = False

def sandglass(func):
    """時間経過を表示させるデコレータ
    """
    def wrapper(*args, **keys):
        try:
            t = myThread()
            print '開始',
            t.start()
            ret = func(* args, **keys)
            return ret
        finally:
            t.kill()
            print '終了'

    return wrapper

if __name__ == "__main__":

    @sandglass
    def do_something():
        """何か時間のかかる処理。
        """
        time.sleep(10) 

    do_something()


実行結果:

C:\usr\home\python>python hourglass.py
開始..........終了

うーん、デコレーターの上手な使い方だなぁ、うまいなあ、と思った。