[Python] Gestione del tempo.
Manlio Perillo
manlio.perillo a gmail.com
Dom 29 Dic 2013 19:27:30 CET
On 28/12/2013 15:17, Gabriele Battaglia wrote:
> [...]
>> Ci sono molte solutioni:
>>
>> 1) SIGALARM su sistemi UNIX
>> 2) ciclo su select con timeout, e aggiorni il tempo con time.clock
>> 3) usi il timer messo a disposizione dal sistema operativo
>> 4) usi il timer messo a disposizione dal tuo framework preferito
>>
> GB: interessante la 2, devo approfondire studiando select perché non ho
> idea di cosa sia e cosa faccia.
> Ho deciso di usare la 3.
Al posto di select puoi fare qualcosa tipo sleep(0.1)
> - userò il numero di secondi trascorso dall’avvio dell’orologi e fornito da time.time()
Attenzione che time.time non è completamente affidabile, perchè l'orario
del sistema potrebbe venire aggiornato, sia durante il passaggio
da/verso all'ora legale, sia per sincronizzare l'orario se il sistema
usa il protocollo NTP.
> Affiderò ad un thread secondario il compito di aggiornare gli orologi
> ogni 0.3 secondi
> e di avvertire l’utente se uno dei 2 counters è arrivato a 00:00:00.
> Al thread primario invece, affiderò il compito di ricevere i comandi
> dall’utente per mezzo dell’immissione di stringhe di 2 caratteri,
> lette da raw_input.
Su sistemi UNIX non hai bisogno di 2 thread separati. Ti basta usare
select, che ritorna nei due casi:
1) il timeout specificato è trascorso
2) l'utente ha immesso dei dati tramite stdin
La fregatura è che sul solito Windows (che è diversamente UNIX) non
funziona.
>
>>
>>> Terza domanda, dovendo stampare i valori dei clocks nella console, come
>>> faccio a scriverli sempre sulla stessa riga evitando così di riempire la
>>> console con due colonne di cifre che scorrono verso l'alto?
>>>
>>
>> Su sistemi UNIX puoi usare curses.
>> Ma ci sono anche altri modi più semplici e limitati.
> GB: ok, darò un occhio alla documentazione di curses ma volevo usare un metodo valido su più sistemi.
> Mi accenneresti a qualcuno degli altri metodi di cui scrivevi qui sopra?
>
> Io avevo pensato:
> 1. cancello tutto il contenuto della console e stampo una stringa che contiene entrambi i contatori, ad ogni secondo che passa.
> 2. Se esiste un carattere di controllo, o sequenza escape che simuli la pressione della freccia sù, potrei costringere la stampa sempre nella medesima riga, invece di farla scorrere verso il basso.
Usa il carattere '\r' che riporta il cursore a inizio riga.
Ciao Manlio
Maggiori informazioni sulla lista
Python