-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 31/03/2013 20:18, Aplemaser ha scritto: > Ciao a tutti e buona pasqua. > > Dopo aver sviluppato, con estrema soddisfazione, un applicativo che > importa/trasforma/riscrive una notevole mole di dati (almeno per me) da > uno o più file CSV ad un database SQL,
Alcuni database come PostgreSQL sono in grado di leggere direttamente files in formato CSV, ovviamente aggiungendo un header opportuno. > ora sto affrontando la difficile > opera di tuning, perché i tempi sono "importanti" dovendo interagire con > oltre 20.000.000 di record tutti i santi giorni. > In linea di massima, e in particolare considerando come hai sviluppato il codice (ossia se passi molto tempo a manipolare stringhe, invece che a leggere/scrivere su file), una riscrittura in C dovrebbe risolvere il problema senza usare threads addizionali. > Dallo studio delle prestazioni hardware della macchina che esegue > l'operazione ho notato che solo uno dei 4 core presenti durante la > lavorazione va a saturazione, mentre gli altri restano relativamente a > riposo. > Certo, perchè in qualsiasi linguaggio, a meno di non avere codice speciale, usi sempre e solo un unico thread. > Ammetto di essere un completo ignorante in materia e mi scuso se la > domanda non è pertinente, ma dopo aver girovagato in rete (a dire il > vero ho trovato molte informazioni datate, non so se più valide) mi è > sembrato di capire che si potrebbero usare dei moduli precisi per far > usare più core, come threading o processing. Esatto. Quale usare dipende però da cosa fa il tuo codice. In generale se usi più processi è meglio, perchè in Python può girare solo un thread alla volta (cerca su Internet Python GIL). > Prima di fare/dire > bestialità ho pensato di chiedere consiglio a voi che magari avete già > avuto esperienza similari, magari indicandomi delle risorse di esempio. > L'obbiettivo è di eseguire più operazioni in parallelo anziché in una unica. > Non esiste nessun comando magico che ti parallelizzi il codice. > Tanto per completare l'informazione la versione di Python utilizzata è > la 2.7 su un sistema Debian 6.0.6. > Devi dirci esattamente cosa sta facendo il tuo codice. Meglio se il codice è breve e lo puoi mettere su pastebin o simili. In generale per parallelizzare del codice, lo devi partizionare in N pezzi indipendenti, ed eseguire ciascun pezzo in un thread. Di solito N = <numero di core> oppure N = n * <numero di core>, dipende da cosa fa il codice, in particolare dal tempo speso in I/O). Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlFYgT0ACgkQscQJ24LbaUSsAwCfRFrwaWlauyXhmxFBXStBM7+d 50gAoIgRJlu/eARDifEKeSAPItFNQdy2 =B/ME -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python