2014-04-11 11 views
8

Daha yeni üzerinde çalışmakta olduğum bir sunucu uygulaması oluşturmaya başladım, biraz fazla işlemci zamanının nerede harcadığını bulmaya çalıştım ve işleri daha sorunsuz hale getirmenin yollarını arıyordum.Python cProfile sonuçları: ncalls için iki sayı

Genel olarak, sanırım cProfile ve pstats kullanmanın iyi bir anı var, ancak bazı işlevlerin ncalls sütununda iki sayıyı nasıl listelediğini anlamıyorum.

Örneğin, aşağıdaki sonuçlarda, neden tüm copy.deepcopy şeyler için iki numara listeleniyor?

  2892482 function calls (2476782 primitive calls) in 5.952 seconds 

    Ordered by: cumulative time 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     27 0.015 0.001 5.229 0.194 /usr/local/lib/python2.7/twisted/internet/base.py:762(runUntilCurrent) 
     7 0.000 0.000 3.109 0.444 /usr/local/lib/python2.7/twisted/internet/task.py:201(__call__) 
     7 0.000 0.000 3.109 0.444 /usr/local/lib/python2.7/twisted/internet/defer.py:113(maybeDeferred) 
     5 0.000 0.000 2.885 0.577 defs/1sec.def:3690(onesec) 
     5 2.100 0.420 2.885 0.577 defs/1sec.def:87(loop) 
    1523 0.579 0.000 2.105 0.001 defs/cactions.def:2(cActions) 
384463/1724 0.474 0.000 1.039 0.001 /usr/local/lib/python2.7/copy.py:145(deepcopy) 
33208/1804 0.147 0.000 1.018 0.001 /usr/local/lib/python2.7/copy.py:226(_deepcopy_list) 
17328/15780 0.105 0.000 0.959 0.000 /usr/local/lib/python2.7/copy.py:253(_deepcopy_dict) 

cevap

9

Daha küçük sayı 'ilkel' veya yinelemesiz aramaların sayısıdır. Daha büyük sayı, özyinelemeli çağrılar da dahil olmak üzere toplam çağrı sayısıdır. Deepcopy tekrarlı olarak uygulandığından, doğrudan 1724 kez derine baktığınız, ancak alt nesneleri kopyalamak için kendisini ~ 383k kez çağırabileceğiniz anlamına gelir.

+0

Teşekkürler. Bu, https://docs.python.org/2/library/profile.html#instant-user-s-manual adresinde bulduğum şeyle eşleşiyor ... Bir soru sorduğunuzda sinir bozucu an ve sonra cevabı bul birkaç dakika sonra daha fazla kazma ile. Daha önce bu sitede hiç yayınlamadığımdan ve 10 tanesinin altına sahip olduğumdan kendi gönderime cevap veremedim. –