2012-04-14 12 views
11

Oggi ho imparato a conoscere i pistooni e così ho deciso di vedere come erano i miei vari ambienti. Ho eseguito pystones sul mio portatile che esegue Windows sul metallo nudo ed ho ottenuto questi risultatiPerché Python è molto più lento su 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) 

Poi mi sono imbattuto su alcuni dei nostri Linux VM ed ho ottenuto 2.7-3.4 volte superiori. Così ho sparato il mio vmware Linux VM sul mio portatile e reran lo stesso test e ottenuto questi risultati:

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) 

Non riesco a capire come il Linux VM in esecuzione all'interno delle stesse finestre in realtà è più veloce di Python in esecuzione su lo stesso metallo nudo sotto le finestre.

Cosa c'è di così diverso in Python su Windows che si comporta più lentamente sul sistema operativo nudo che in una macchina virtuale che esegue Linux nella stessa casella?

  • Maggiori dettagli piattaforma Windows Win7x64 32 bit di pitone in esecuzione su entrambe le piattaforme a 32 bit linux VM in esecuzione sulla piattaforma Windows in VMWare
+0

Dipende dagli altri processi in esecuzione nello stesso momento. –

+2

Diverse libc.* corre * –

+5

Il Python era in esecuzione nella VM e su Linux a 64 bit? Vedo che la versione di Windows era a 32 bit. Assicurati di confrontare le mele con le mele. – agf

risposta

7

Non posso rispondere alla tua domanda, ma considerano questo elenco di cose che potrebbero fare la differenza:

  • Stai usando diverse versioni di Python. "2.7.2+" indica che il tuo Linux Python è stato creato da una versione di controllo del controllo della versione piuttosto che da una versione.

  • Sono stati compilati con compilatori diversi (e, teoricamente, con livelli di ottimizzazione diversi).

  • Non hai menzionato la riproduzione di questo molto. È concepibile che fosse un colpo di fortuna, se non l'hai fatto.

  • La VM potrebbe essere temporizzata in modo impreciso.

  • Stai collegando diverse implementazioni delle dipendenze di Python, in particolare libc come sottolinea Ignacio Vazquez-Abrams.

  • Non so quali sono gli effettivi benchmark di pystone, ma molte cose funzionano in modo diverso - cose come la gestione Unicode o l'I/O del disco potrebbero essere fattori dipendenti dal sistema.

+0

ho riprodotto 3 volte prima di scrivere questo. Sì, non l'ho menzionato però. – boatcoder

3

Esegui software antivirus su quella casella di Windows? Questo forse potrebbe spiegarlo. Personalmente mi piace aggiungere Python, Cygwin e la mia directory delle fonti all'elenco delle esclusioni antivirus - penso di ottenere un piccolo, ma notevole aumento di velocità. Forse questo spiega i tuoi risultati.

+0

No, nessun antivirus. – boatcoder

2

Aveva un problema simile su Windows 10 - era a causa di Windows Defender.

Ho dovuto escludere le directory Python e il processo nelle impostazioni di Windows Defender e riavviare il computer.

Prima: dovevo aspettare circa ~ 20 secondi per eseguire qualsiasi codice Python - ora è millisecondo.

Problemi correlati