2011-05-11 18 views
18
Ben numpy senaryoyu profil Python'un (v2.4) profile modülü kullanıyorum ve aşağıdaki giriş icra zaman büyük kısmından göründüğü

(?):Python'un profili modülü: <string>: 1

ncalls tottime percall cumtime percall filename:lineno(function) 
256/1 0.000 0.000 7.710 7.710 <string>:1(?) 

Maalesef görünümü Google'a zorlaştırıyor.

Bunun tam olarak ne olduğunu bulmaktan nasıl bahsederim? python -m profile -s cumulative script.py

+0

Profilciyi çalıştırmak için 'profile.run()' kullanıyor musunuz? Sonra ': 1', bu işleve ilettiğiniz ifade dizesinin ilk satırını belirtir. Profilciyi farklı bir şekilde çağırıyorsanız, lütfen belirtin. –

+0

@Sven Marnach: İyi nokta, bu bilgiyi bu soruya ekledim. – NPE

+1

Daha yüksek performans istediğiniz için sorduğunuzu varsayarak [bunu deneyin] (http://stackoverflow.com/questions/4295799/how-to-improve-performance-of-this-code/4299378#4299378). –

cevap

19

bu satırı göz ardı aşağıdaki gibidir:

düzenlemek profil kabuğu çalıştırılır. Profilcinin nasıl uygulandığını gösteren bir eserdir. Size yararlı bir şey söylemiyor. Bunun için "tottime" değerine bakın: 0.000. "tottime", "<dizgisi>: 1 (?)" ifadesini yürütmek için harcanan süreyi, bunun için yürütme süresi harcanan zaman miktarıdır. Yani, burada hiçbir zaman harcanmaz. "cumtime" ve "percall" büyüktür çünkü çocuklar için harcanan süreyi içerir. Daha fazla bilgi için http://docs.python.org/library/profile.html#cProfile.run'a bakın.

+1

ama * en büyük * tottime ': 1 () 'ise? – endolith

+4

': 1 ()' giriş Python komut dosyasında en üst düzey koddur. Yani, tüm kodunuz "foo.py" içinde üst düzeydeyse ve python foo.py'yi yapıyorsanız, o zaman : 1 () 'için yüksek bir zamanaşımı görürsünüz. "Üst düzey" ile, herhangi bir işlev tanımı içinde değil demek istiyorum - sadece doğrudan çalıştırın. –