2012-04-14 4 views
11

Ich habe heute etwas über Pystones gelernt und so habe ich beschlossen zu sehen, wie meine verschiedenen Umgebungen waren. Ich lief pystones auf meinem Laptop, die Fenster auf dem blanken Metall ausgeführt und habe diese ErgebnisseWarum ist Python so viel langsamer auf Windows?

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from test import pystone 
>>> for i in range(0,10): 
... pystone.pystones() 
... 
(1.636334799754252, 30556.094026423627) 
(2.1157907919853756, 23631.82607155689) 
(2.5324817108003685, 19743.479207278437) 
(2.541626695533182, 19672.4405231788) 
(2.536022267835051, 19715.915208695682) 
(2.540327088340973, 19682.50475676099) 
(2.544761766911506, 19648.20465716261) 
(2.540296805235016, 19682.739393664764) 
(2.533851636391205, 19732.804905346253) 
(2.536483186973612, 19712.3325148696) 

Dann lief ich es auf einigen unserer Linux-VMs und bekam 2,7-3,4 mal bessere Leistung. So feuerte ich meine vmware Linux VM auf meinem Laptop und reran den gleichen Test und bekam diese Ergebnisse:

Python 2.7.2+ (default, Oct 4 2011, 20:03:08) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> for i in range(0,10): 
... pystone.pystones() 
... 
(1.75, 28571.428571428572) 
(1.17, 42735.042735042734) 
(1.6600000000000001, 30120.48192771084) 
(1.8399999999999999, 27173.913043478264) 
(1.8200000000000003, 27472.52747252747) 
(1.8099999999999987, 27624.30939226521) 
(1.3099999999999987, 38167.938931297744) 
(1.7800000000000011, 28089.88764044942) 
(1.8200000000000038, 27472.527472527414) 
(1.490000000000002, 33557.04697986573) 

Ich kann nicht ganz verstehen, wie die Linux-VM innerhalb der gleichen Windows läuft, ist tatsächlich schneller als Python läuft auf das gleiche blanke Metall unter den Fenstern.

Was ist so anders an Python in Windows, dass es auf dem nackten Betriebssystem langsamer läuft als auf einer VM, auf der Linux auf derselben Box läuft?

  • Weitere Details Windows-Plattform Win7x64 32-Bit-Python auf beiden Plattformen laufen 32-Bit-Linux-VM die Windows-Plattform in VMWare
+0

Hängt von den anderen Prozessen ab, die gleichzeitig ausgeführt werden. –

+2

Verschiedene libc.* runs * –

+5

Wurde Python in der VM und unter Linux 64-Bit ausgeführt? Ich sehe die Windows-Version war 32-Bit. Stellen Sie sicher, dass Sie Äpfel mit Äpfeln vergleichen. – agf

Antwort

7

Ich kann Ihre Frage nicht beantworten, sollten Sie jedoch diese Liste der Dinge, die einen Unterschied machen könnten:

  • Sie verwenden verschiedene Versionen von Python. "2.7.2+" gibt an, dass Ihr Linux-Python aus einem Versionskontroll-Checkout und nicht aus einem Release erstellt wurde.

  • Sie wurden mit verschiedenen Compilern kompiliert (und möglicherweise sinnvoll unterschiedliche Optimierungsstufen).

  • Sie haben dies nicht erwähnt. Es ist denkbar, dass es ein Glücksfall war, wenn Sie es nicht getan haben.

  • Ihre VM ist möglicherweise ungenau.

  • Sie verknüpfen verschiedene Implementierungen von Pythons Abhängigkeiten, insbesondere libc, wie Ignacio Vazquez-Abrams darauf hinweist.

  • Ich weiß nicht, wie pystones tatsächliche Benchmarks sind, aber viele Dinge funktionieren anders - Dinge wie Unicode-Behandlung oder Disk-IO könnten systemabhängige Faktoren sein.

+0

ich reproduziert es 3-mal, bevor ich dies schrieb auf. Ja, ich habe es aber nicht erwähnt. – boatcoder

3

Führen Sie Antivirussoftware auf dieser Windows-Box aus? Dies könnte es vielleicht erklären. Ich persönlich möchte Python, Cygwin und mein Source-Verzeichnis zur Antivirus-Ausschlussliste hinzufügen - ich denke, ich bekomme eine kleine, aber spürbare Beschleunigung. Vielleicht erklärt das deine Ergebnisse.

+0

Nein, kein Antivirus. – boatcoder

2

Hatte ähnliches Problem auf Windows 10 - es war wegen Windows Defender.

Ich musste Python-Verzeichnisse ausschließen und in Windows Defender-Einstellungen verarbeiten und Computer neu starten.

Vorher: Ich musste ~ 20 Sekunden warten, um irgendeinen Python-Code auszuführen - jetzt sind es Millisekunden.