Topic: Velocizzare esecuzione di un progetto python  (Letto 114 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Denis

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Velocizzare esecuzione di un progetto python
« il: Marzo 03, 2021, 14:21 »
Buongiorno,
Sto scrivendo un codice python abbastanza corposo e formato da molti file python e avrei bisogno di incrementare la velocità di calcolo. Attualmente ho già parallelizzato il codice con le pool e multiprocessing e ho cercato di ottimizzare il più possibile con le comprehension per inizializzare le liste. Inoltre alcuni codici python chiamano altri file python con il classico metodo os.system("python nomeDelCodice.py arg1 arg2 ..."). Non so se questo approccio rallenta l'esecuzione perchè ogni volta deve ricompilare il codice o no.
Vorrei chiedervi gentilmente consigli per accelerare l'esecuzione del progetto. Eventualmente dei consigli generici per riuscire a orientarmi nella ricerca e studio e se disponibili dei tutorials. Online ho trovato molti post ma non riesco a comprendere bene la migliore opzione e modalità di utilizzo senza dover cambiare drasticamente l'attuale progetto.

Ringrazio molto anticipatamente
Cordiali saluti

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.154
  • Punti reputazione: 9
    • Mostra profilo
Re:Velocizzare esecuzione di un progetto python
« Risposta #1 il: Marzo 16, 2021, 21:53 »
Mah sai, detto così vuol dire tutto e vuol dire niente. Ovviamente, in ultima analisi, c'è un solo modo per capire se il tuo codice rallenta in certe parti dove forse potrebbe essere più veloce: prendi un profiler e analizza l'esecuzione del programma, pezzo a pezzo.
Detto questo, ovviamente ci sono delle classi di problemi tipici, che uno "già lo sa" che le cose potrebbero andare storte. Se fai molto number-crunching in pure python, o se lavori con dataset molto vasti, ti conviene integrare numpy, per ovvie ragioni. Eccetera.
Però sai, più a monte ancora mi preoccuperei di avere una robusta conoscenza degli algoritmi di base e di come si implementano... che so, se stai cercando di dimostrare la congettura di collatz (!) e non sai che esiste la memoizzazione, hai voglia poi di "parallelizzare il codice con le pool e le multiprocessing"... cioè, starei attento a non scivolare sulle cose di base prima di mettermi a pensare alle raffinatezze.
E più a monte ancora, penserei prima di tutto a scrivere buon codice python sensato e robusto... cioè, mi fa sempre molto effetto quando leggo di qualcuno che sta scrivendo un progetto "abbastanza corposo e formato da molti file python" e poi usa os.system, che è superato da dieci anni e sa tanto di cosa presa e copincollata da qualche angolo sperduto della grande rete. Mi preoccuperei di avere una certa dimestichezza con le strutture e le tecnologie, di capire che cosa fa il codice che sto scrivendo, di capire come certi problemi si risolvono di solito... di vedere se ci sono librerie (o interi framework) che già svolgono i compiti che ho in mente... di fare delle ricerche prima di mettermi a scrivere la prima riga di codice... di non reinventare la ruota, insomma. Siamo nel 2021, ormai è raro trovarsi a esplorare un campo applicativo per cui non esiste proprio nessuna soluzione, neanche orientativa, che non sia già stata descritta...