View difference between Paste ID: 1VFvS7jf and JkEFdt1P
SHOW: | | - or go back to the newest paste.
1
import psutil
2
from time import time
3
4
def toggle(decorator):
5
    """ позволить "подключать" и "отключать" декоратор """
6
    def new_decorator(fn):
7
        decorated = decorator(fn)
8
9
        def new_decorated(*x):
10
            if decorator.enabled:
11
                return decorated(*x)
12
            else:
13
                return fn(*x)
14
15
        return new_decorated
16
17
    decorator.enabled = True
18
    return new_decorator
19
20
@toggle
21
def timed(fn):
22
    def decorated(*x):
23
        start = time()
24
        result = fn(*x)
25
        print "Executing %s took %d ms" % (fn.__name__, (time()-start)*1000)
26
        return result
27
    return decorated
28-
@toggle(timed)
28+
29
@toggle
30
def repeat(times):
31
    """ повторить вызов times раз, и вернуть среднее значение """
32
    def decorator(fn):
33
        def decorated2(*x):
34
            total = 0
35
            for i in range(times):
36
                total += fn(*x)
37
            return total / times
38
        return decorated2
39
    return decorator
40
41
@timed
42
@repeat(5)
43
def cpuload():
44
    load = psutil.cpu_percent()
45
    print "cpuload() returns %d" % load
46
    return load
47
48
print "cpuload.__name__==" + cpuload.__name__
49
print "CPU load is %d%%" % cpuload()
50
timed.enabled = False
51
print "CPU load is %d%%" % cpuload()