Estrazione di dati da file di registro

-1

Estrarrò determinati bit dai file di registro utilizzando le espressioni regolari per filtrare il bit di dati. Inizialmente stavo per farlo con Python. Più tardi ho iniziato a pensare al modo più veloce in cui posso svolgere questo compito. Questo mi ha portato alla programmazione parallela. Ricordo di aver sentito da qualche parte che Python non può essere veramente parallelo. Sono di gran lunga un programmatore esperto. Ho giocato con Java per un po 'e stavo considerando la programmazione parallela in Java per svolgere questo compito. Mi stavo chiedendo quale sarebbe stato il modo più veloce per eseguire questa attività?

    
posta Liondancer 17.01.2014 - 23:16
fonte

1 risposta

3

Supponendo che tu stia parlando della velocità di esecuzione e non della velocità di sviluppo, C potrebbe essere difficile da battere. Ma non credo che batterebbero Java o persino Python di questi tempi. Python è in gran parte un sottile wrapper su implementazioni C, anche se con una sintassi più efficiente e una libreria più ricca.

In definitiva, penso che il tuo programma sarà vincolato all'I / O. L'aggiunta di più thread o processi probabilmente non consentirà di recuperare i dati dal disco o dalla rete più velocemente.

Per ridurre al minimo il tempo di CPU del tuo programma (al contrario del suo tempo di esecuzione), dovresti usare la libreria di espressioni regolari più veloce che puoi trovare, e semplificare il più possibile il formato del registro e regex. Un approccio a più passaggi per analizzare le linee di log potrebbe aiutare anche a usare qualcosa di semplice e veloce per suddividere le righe di log in frasi e quindi passare le frasi per separare espressioni regolari che sarebbero collettivamente più semplici e veloci di una singola regex a analizzare l'intera riga.

Per parallelizzare, avrei le linee di vendita del thread principale a un pool di processori di linea, ognuno eseguito su un thread separato, forse con n code per i n thread. Potresti avere linee elaborate in ordine, quindi fai attenzione. E se un thread di elaborazione è ancora più veloce del disco o dell'I / O di rete, allora stai aggiungendo complessità senza alcun guadagno reale.

Soprattutto, quando si cerca di migliorare la velocità, il profilo e misurare prima e dopo ogni cambiamento. Devi essere in grado di dimostrare che stai facendo il programma più velocemente.

    
risposta data 17.01.2014 - 23:45
fonte

Leggi altre domande sui tag