Ho un framework composto da diversi strumenti scritti in python in un ambiente multiutente.Come velocizzare Python all'avvio e/o ridurre la ricerca di file durante il caricamento delle librerie?
La prima volta che accedo al sistema e avvio di un comando ci vogliono 6 secondi solo per mostrare alcune linee di aiuto. Se rilancio immediatamente lo stesso comando, occorrono 0,1 secondi. Dopo un paio di minuti torna a 6 secondi. (prova di cache di breve durata)
Il sistema si trova su un GPFS quindi il throughput del disco dovrebbe essere ok, sebbene l'accesso potrebbe essere basso a causa della quantità di file nel sistema.
strace -e open python tool | wc -l
mostra 2154 file a cui si accede all'avvio dello strumento.
strace -e open python tool | grep ENOENT | wc -l
mostra 1945 file mancanti ricercati. (Un pessimo rapporto hit/miss mi chiedi :-)
Ho l'impressione che il tempo eccessivo impiegato nel caricamento dello strumento venga consumato interrogando il GPFS su tutti quei file, e questi vengono memorizzati nella cache per il prossimo chiamata (a livello di sistema o GPFS), anche se non so come testarlo/dimostrarlo. Non ho accesso root al sistema e posso solo scrivere su GPFS e/tmp.
E 'possibile migliorare questo python quest for missing files
?
Qualche idea su come testare questo in modo semplice? (Reinstallare tutto su/tmp non è semplice, dato che ci sono molti pacchetti coinvolti, virtualenv non sarà di aiuto neanche (credo), dal momento che è solo collegando i file sul sistema gpfs).
Un'opzione sarebbe ovviamente avere un daemon che si biforca, ma che è tutt'altro che "semplice" e sarebbe una soluzione di ultima istanza.
Grazie per la lettura.
Effettivamente ho provato questo e sembrava promettente, anche se tutte le librerie di default sono lanciate all'avvio e non posso dire a python da quale file deve caricare un modulo, ma lascialo cercarlo in una directory, causando 4 chiamate open() e almeno 2 miss. Spero solo che ci sia un modo per dire a Python di non farlo. – estani