2017-12-25 11 views
0

Ich benutze memory_profiler in Python und Profiling ein Stück Code. Aber ich möchte nur, dass es aktiviert wird, wenn das Testen stattfindet, so wie die Funktion von einer Testsuite aufgerufen wird. Ich möchte nicht, dass der Profiler aktiviert wird, wenn Code in der Produktion ausgeführt wird. Gibt es eine Möglichkeit, das zu tun?Wie aktiviert man Speicher Profiler nur beim Testen in Python?

Ich bin offen für generische Vorschläge wie "wie man Dekoratoren nur aktiviert, wenn der Test stattfindet?".

Beispielcode -

from memory_profiler import profile 

@profile(precision=4) 
def my_func(): 
    a = [1] * (10 ** 6) 
    b = [2] * (2 * 10 ** 7) 
    del b 
    return a 

Antwort

1

Dekorateur,

@profile(precision=4) 
def my_func(): 
    ... 

ist nur eine andere Art des Schreibens dieser:

def my_func(): 
    ... 

my_func = profile(precision=4)(my_func) 

Deshalb, wenn Sie einen „bedingten Dekorateur“ benötigen, Sie können die Bedingung auf die letztere anwenden:

from memory_profiler import profile 

testing = False 
def my_func(): 
    a = [1] * (10 ** 6) 
    b = [2] * (2 * 10 ** 7) 
    del b 
    return a 

if testing: 
    my_func = profile(precision=4)(my_func) 
+0

Die Variable 'my_func' ist die gleiche wie der Funktionsname' my_func' war es beabsichtigt oder nur ein Name? –

+0

@ AnirbanNag'tintinmj 'Es ist absichtlich – abccd

+0

Also meinst du, wenn ich nicht den Variablennamen als Funktion identisch halten wird es nicht funktionieren? –

Verwandte Themen