Warum Mesh Python Code langsamer als zerlegt?

8

Ich habe überraschendes Python-Verhalten entdeckt, während ich den Thread Warum liest man Zeilen von stdin in C ++ viel langsamer als in Python? .

Wenn ich einfachen Python-Code von diesem Thread ausführen

%Vor%

es funktioniert mit Geschwindigkeit 11.5M LPS, und wenn ich das ganze Skript in einzelne Funktion zerlegen

%Vor%

Code beschleunigt bis zu 23M LPS.

Warum macht dieses einfache Refactoring meinen Code 2 mal schneller?

Ich habe meine Tests mit Python2.7 unter Ubuntu 13.10 durchgeführt.

    
Eugene Krokhalev 14.01.2014, 06:14
quelle

1 Antwort

4

Auf Bytecode zu schauen hat mir geholfen, diese Frage zu beantworten. Byte-Code für den Arbeitsteil des ersten Skripts ist:

%Vor%

Und der Bytecode für den entsprechenden Teil des zweiten Skripts lautet:

%Vor%

Ich sehe, dass der tatsächliche Unterschied zwischen diesen Codes LOAD_NAME vs LOAD_FAST und STORE_NAME vs STORE_FAST Opcodes mit ist. Dokumentation Ссылка sagt das Mit LOAD_FAST wird nur mit Indizes gesucht, während mit LOAD_NAME nach Zeichenfolge gesucht wird. Und der erste Ansatz ist zweimal schneller.

    
Eugene Krokhalev 14.01.2014, 07:31
quelle

Tags und Links