Closed Pix3l01 closed 3 years ago
Tra l'altro, siccome il sender viene chiamato dal receiver e il receiver ha già la lista con tutte le flag, si può passare al sender la lista (con le flag duplicate rimosse) senza fargli fare la query al db. Così per ogni gruppo di flag ricevute si può runnare il sender su un nuovo thread e gestire gli accessi al db solo per l'update dello stato
Occhio solo a non perdervi flag in giro in caso di errori se non le salvate nel db, se fate così e uno dei due thread crasha per qualche motivo, quelle finiscono nell'oblio. E se dovete riavviare il submitter per qualche motivo rischiate di perdervene un bel po'
Occhio solo a non perdervi flag in giro in caso di errori se non le salvate nel db, se fate così e uno dei due thread crasha per qualche motivo, quelle finiscono nell'oblio. E se dovete riavviare il submitter per qualche motivo rischiate di perdervene un bel po'
Infatti le flag vengono ricevute, salvate su database e solo in seguito vengono submittate. Il passaggio delle flag tra ricezione e invio al momento viene fatto tramite database, ma per diminuire il numero di query si possono passare direttamente da "dentro il programma". Per togliere la paura di flag ricevute ma non submittate si può fare una funzione che ogni x secondi controlla se ci sono flag non submittate e le invia
Io ho fatto qualche prova e su un db con 500k record la query per prendere le flag gira in 0.015s (0.23 sul filesystem di Windows) Secondo me alla fine va bene così, evitiamo di complicare le cose che più roba mettiamo più è probabile che si rompa qualcosa
Tra l'altro per popolarlo con sto mezzo milione di entry ci ho messo 146 secondi sul filesystem di Windows e 8 su quello di Linux (tramite WSL)
Ok, allora lasciamo così. Vedremo, forse, in futuro se mai vorremo migliorarlo
Nel caso in cui le flag sono più di 100, siccome la query prende già tutte le flag, si possono inviare le flag a blocchi direttamente da codice python senza fare ulteriori accessi al database. Si continua ad inviare flag a botte di 100 fino a quando la lista non è vuota