[Python] Chiedo consigli sul mantenere attivo un thread

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1627
Iscrizione: giovedì 12 ottobre 2006, 11:34

[Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da nuzzopippo »

I Miei saluti

Nei miei "divertissement" quotidiani ho realizzato un sub-classamento di Threading.Thread che, tra le varie cosette che fa cerca anche di definire, in automatico, marginatura e rilegatura delle pagine di un pdf, dopo averlo provato un po' ho concluso che gli automatismi da me previsti sono insufficienti e mi preparo a modificarlo in modo da permettere una definizione interattiva da parte dell'user di intervalli di più pagine ed il tipo di marginatura collegato.
Per permettere tale selezione, prevedo di tenere attivo il thread, dopo il caricamento del documento, semplicemente avviando un ciclo while vuoto e collegato ad una variabile, in questo modo :

Codice: Seleziona tutto

    def run(self):
        if not self.pint:
            self.stop = True
            self._clear_cache()
            self._pdf_cache(self.f_name, self.pwd)
            self.load_document(self.f_name, self.pwd)
        else:
            self.load_document(self.f_name, self.pwd)
        while not self.stop:
            pass
Tenere attivo un thread è un meccanismo che di solito non uso e l'estrema semplicità del ciclo while adottato mi dà da pensare. La domanda è : sarebbe una metodologia corretta, quella adottata, o vi sono accorgimenti da tener presenti e che ignoro?, se sussistono tali accorgimenti, sapreste indicarmi della documentazione in merito?

Grazie dell'attenzione :)
Fatti non foste a viver come bruti ...
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 857
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da TommyB1992 »

Personalmente ho cercato un pò per miei progetti personali e, se utilizzi il modulo thread, non ho visto adottare soluzioni differenti.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1627
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da nuzzopippo »

TommyB1992 ha scritto:
domenica 30 aprile 2023, 14:51
Personalmente ho cercato un pò per miei progetti personali e, se utilizzi il modulo thread, non ho visto adottare soluzioni differenti.
Grazie dell'intervento @Tommy,
in effetti anche le mie ricerche, antecedenti e posteriori al post, danno lo stesso risultato ed alle mie conoscenze attuali non vi è niente che non vada dal punto di vista "logico" ... però so della lacunosità della mia conoscenza e comprensione e, quindi, mi pongo domande e cerco suggerimenti.
Fatti non foste a viver come bruti ...
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da Claudio_F »

Se nel frattempo non è cambiato qualcosa, rispetto a prove fatte ormai diversi anni fa, un while così monopolizza tutto il tempo CPU. Ci va inserito uno sleep di almeno qualche millisecondo.
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 857
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da TommyB1992 »

Nuzzo, lungi da me insegnare nulla perchè probabilmente ne so meno di te e di chiunque altro qui dentro. perciò l'esperienza che riporto non è la mia ma un mix di articoli di programmatori guru e di storie (anche fallimentari) come quelle di netscape, in quanto ho spesso ricercato e letto proprio perchè mi domandavo <<come sviluppare un buon codice> e <<quando un codice è abbastanza buono?>> e che alla fine più o meno quello che consigliano è: se un codice funziona, è mantenibile nel tempo ed è facilmente comprensibile, allora evita di rimetterci le mani sopra. Per quanto sia contro ideologico di tutti quei programmatori puristi nei quali spesso scadono i fanatici dei principi SOLID (ora qualcuno mi mangia).

Ovviamente il mio è un discorso generale che non per forza ricollegabile direttamente alla tua domanda leggittima che sicuramente puoi riutilizzare anche in futuro con una classe di problemi differente, però mi sembrava un processo logico che ho affrontato spesso nella mia vita.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1627
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da nuzzopippo »

@Claudio_F, grazie della Tua esperienza condivisa, in effetti la risposta di un ciclo while vuoto era una delle mie sorgenti di perplessità, proverò senz'altro il Tuo suggerimento.
Ovviamente, sperimenterò a mia volta per vedere differenze di "fluidità" della applicazione, dato che il contesto di "user input" permette una certa generosità nell'introdurre dei tempi di attesa.

@TommyB1992 sono lontanissimo dall'essere un purista, se mi riuscisse di scrivere codice "passabile" sarebbe già molto per me, riguardo al SOLID, come puoi riscontrare dallo stralcio di codice del "run" postato già mi preparo a violare il principio "ISP", per la doppia modalità di funzionamento, e "LSP", dato che al momento non sto considerando sub-classamenti ... anche se, a pensarci, forse non sarebbero una cattiva idea.
Come Te, apprezzo il codice funzionante, chiaro e facilmente comprensibile, l'introduzione di maggiore astrazione può aumentare la difficoltà nella comprensione, non di meno e seppur zoppicante, sono alla continua ricerca di migliorare il mio approccio cercando di acquisire nuovi concetti, metodologie e pattern, ovviamente per quanto mi riesce.
Ho sempre da imparare dagli altri ed interventi come il Tuo sono graditi, danno da pensare e, conseguentemente, apportano miglioramenti.

Signori, Vi ringrazio :)
Fatti non foste a viver come bruti ...
JessieJim1
Prode Principiante
Messaggi: 8
Iscrizione: martedì 2 maggio 2023, 7:59
Sesso: Femminile

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da JessieJim1 »

Ciao! In primo luogo, il ciclo while vuoto potrebbe causare un aumento dell'utilizzo della CPU, che potrebbe rallentare il sistema o influire sulle prestazioni. Inoltre, potrebbe essere difficile interrompere il thread se necessario. Una soluzione potrebbe essere l'uso di un meccanismo di blocco, come ad esempio threading.Event(), che permette di mettere in pausa il thread e riprenderlo quando necessario. In alternativa, potresti considerare l'uso di un timer per verificare periodicamente se ci sono operazioni da eseguire invece di mantenere il thread sempre attivo.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1627
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Python] Chiedo consigli sul mantenere attivo un thread

Messaggio da nuzzopippo »

Ciao @JessieJim1 ben venuto
JessieJim1 ha scritto:
mercoledì 3 maggio 2023, 4:46
Ciao! In primo luogo, il ciclo while vuoto potrebbe causare un aumento dell'utilizzo della CPU, che potrebbe rallentare il sistema o influire sulle prestazioni. Inoltre, potrebbe essere difficile interrompere il thread se necessario.
Beh, riguardo questo aspetto, già segnalato da @Claudio_F, avrei idea di valutare che succede con l'utilizzo di un time.sleep() nel while, provando intervalli da millesimi a decimi di secondo, oltre a non mettercelo proprio, ciò giusto per rendermi conto di cosa succede, come detto in precedenza, non mi è abituale tenere dei thread "aperti".

Di per se, l'utilizzo dei thread è motivato più che altro dalla impossibilità di prevedere i tempi di elaborazione di un file pdf scelto da un utente, da tests effettuati in alcuni casi (libri) ci son volute diverse decine di secondi solo per il caricamento del file, prima ancora che iniziassero i segnali dei processi di preparazione (produzione di immagini delle pagine, calcolo delle marginature presenti, etc.) per la successiva rappresentazione, per tale motivo ho ritenuto di "staccare" completamente tale processo dai processi grafici ed implementare l'emissione di una serie di segnali raccolti da questi ultimi che adeguano, in conseguenza, il loro stato ... nella versione primitiva del thread esso non viene nemmeno memorizzato.
Ovviamente, volendolo rendere interattivo con l'user le cose devono cambiare.
JessieJim1 ha scritto:
mercoledì 3 maggio 2023, 4:46
Una soluzione potrebbe essere l'uso di un meccanismo di blocco, come ad esempio threading.Event(), che permette di mettere in pausa il thread e riprenderlo quando necessario...
Strada esplorabile, anche se, nel mio caso, penso sia sufficiente esporre una API che provveda a ripetere uno specifico metodo di valutazione al variare delle definizioni da parte dell'utente e quindi riemettere i segnali di aggiornamento per i vari visualizzatori e workers.

Grazie dei suggerimenti :)
Fatti non foste a viver come bruti ...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Majestic-12 [Bot] e 8 ospiti