Ho notato per caso che un semplice programma che genera una classe da un file di dati di grandi dimensioni è molto più veloce in Python 2.7 contro 3.5. Ho letto here che l'uso di numeri interi "infinita precisione" era da biasimare per rallentamento della semplice enumerazione, ma anche quando ho provato un semplice test istanziare questa classe ho scoperto che Python 3 è stata significativamente più lenta:Istanza di classe più lenta in Python 3 che Python 2
class Benchmark(object):
def __init__(self):
self.members = ['a', 'b', 'c', 'd']
def test():
test = Benchmark()
if __name__ == '__main__':
import timeit
print(timeit.timeit("test()", setup="from __main__ import test"))
ho pensato forse era a che fare con le dimensioni di ogni istanza classe, ma l'istanza Python 3 era più piccola di 2 (56 vs 64)
$python3 benchmarks.py
0.7017288669958361
$python benchmarks.py
0.508942842484
ho provato molte variazioni su questo tema, anche con 3.4 da un macchina diversa, e ottengono sempre gli stessi risultati. Qualche idea su cosa sta succedendo?
Il duplicato collegato riguarda Python 3 che è più veloce di Python 2, mentre questa domanda riguarda il contrario. Votazione per riaprire. – jwodder
Cosa ottieni se semplicemente esegui 'timeit (" Benchmark() ", ...)'? Sembra che tu non voglia realmente temporizzare la chiamata di funzione, l'assegnazione di variabile, ecc. E cosa succede se hai solo la volta della creazione della lista? – shx2
Ottengo gli stessi risultati fino a quando non li abbasso alla sola classe. Ho fatto solo 'class A: pass' e ho cambiato la chiamata' timeit' a 'timeit (" A() ", setup =" da __main__ import A ")' e Py2 era due volte più lento di Py3. Qualunque siano i risultati iniziali, dubito che questo abbia a che fare con l'istanziazione degli oggetti. Se faccio quella 'classe A (oggetto): pass', i risultati sono indistinguibili. –