<div dir="ltr">Il giorno 01 aprile 2013 16:54, Daniele Varrazzo <span dir="ltr"><<a href="mailto:piro@develer.com" target="_blank">piro@develer.com</a>></span> ha scritto:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><span style="color:rgb(34,34,34)">Hai ragione: facendo andare in parallelo i core sfrutteresti meglio la macchina, e il tuo problema non è I/O bound altrimenti non vedresti neanche quel singolo core maxxato.</span></div>
</blockquote><div><br></div><div style>Esatto, è il mio punto di partenza questo.</div><div><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
<span style="color:rgb(34,34,34)">Come farlo non è gratis e non c'è una ricetta generica. Se il tuo input è su tanti file, lancia 4 processi in parallelo e fai lavorare ognuno su 1/4 dell'input. Se il file di input è uno solo puoi spezzare il processo in due parti: uno che legge l'input, lo spezza e ne manda i pezzi in una coda; altri 3-4 processi che leggono dalla coda in round-robin e fanno il loro lavoro sul pezzetto. Per questo tipo di lavori ZeroMQ è perfetto: ha poco overhead e le primitive giuste per questo tipo di coordinazione. Come detto non esistono ricette generiche, ma esistono dei pattern generici, e 0MQ rende abbastanza semplice implementarli.</span></div>
</blockquote><div><br></div><div style>Non conosco quanto citi e quindi approfondirò sicuramente. Sono consapevole che nulla ti è regalato e che devi sporcarti le mani per ottenere i migliori risultati.</div><div><br></div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><span style="color:rgb(34,34,34)">Tieni conto che, dopo l'elaborazione, passare i dati a MySQL come stai probabilmente facendo (con delle INSERT) non è il modo più efficiente. Su PostgreSQL usare COPY è almeno 20 volte più efficiente di INSERT per il bulk-load dei dati. Se MySQL è opzionale come dici, abbandonalo e usa postgres: psycopg offre supporto a COPY da Python <</span><a href="http://initd.org/psycopg/docs/usage.html#copy" target="_blank">http://initd.org/psycopg/<u></u>docs/usage.html#copy</a><span style="color:rgb(34,34,34)">>. Se resti in MySQL penso tu possa usare LOAD DATA INFILE per velocizzare il caricamento, ma è un po' più articolato (devi salvare i dati in un file temporaneo o creare una pipe).</span></div>
</blockquote><div><br></div><div style>Bene, come dicevo è opzionale l'utilizzo di MySQL e quindi analizzerò volentieri il passaggio a PostgreSQL, almeno un test lo farò sicuramente.</div><div><br></div><div style>Grazie per le risposte.</div>
</div></div></div>