Sto facendo un programma che si occupa principalmente di estrazione e analisi di dati pesanti. Si tratta principalmente di un algoritmo di tipo back-end, senza elementi GUI o finestre della console visti durante l'esecuzione. Occasionalmente, tuttavia, sarà necessario rappresentare graficamente qualcosa o ottenere input molto speciali dall'utente. Tuttavia, inizialmente non volevo creare l'applicazione integrata nella GUI poiché ritengo che sarebbe eccessivamente complicata. Invece, volevo semplicemente rendere il mio algoritmo separato da qualsiasi elemento della GUI, e se erano necessari, quindi generare i loro in, fanno il loro lavoro, e poi escono; sono aggiunte al programma base, non necessarie per il suo funzionamento.
Quindi, la conclusione logica è che la mia elaborazione dei dati avviene nel thread principale, e la mia GUI occupa un altro thread quando necessario. Perché ho bisogno di due thread? Perché la GUI mi richiede di eseguire un ciclo di eventi in modo che tutto rimanga sotto controllo.
L'utilità grafica / GUI che ho scelto per questa attività è PyQt5, ma dovrebbe essere oltre al punto (la maggior parte di questi ha la stessa meccanica di base).
Si scopre però che agli elementi della GUI non piace essere eseguiti in un thread non principale ( vedi qui ). È possibile, come puoi vedere qui , ma la comunicazione dal thread principale e dal thread secondario è sgradevole. Non devo passare le informazioni tanto quanto devo interagire effettivamente con i metodi dell'oggetto della GUI. Non devo fare alcuna manipolazione effettiva dei widget della GUI da un altro thread, basta accedere ai metodi non GUI che appartengono all'oggetto della GUI.
Questo deve essere un progetto comune, ma non ho idea di come implementarlo. Tieni presente che, quando dico "elaborazione dati", è molto più complicato di così. Così, costruendo una GUI attorno ad esso, e avere tutto ciò che viene fatto all'interno di segnali e slot sembra renderlo un immenso casino.
Quindi ecco le domande generali. Non sto cercando codice, ma piuttosto indicatori generali.
-
Come progetteresti un programma come questo?
-
Come sarebbe ogni thread?
-
Come interagiscono in un modo che non fa arrabbiare la GUI?