Discussione:
eseguire un ciclo a tempo
(troppo vecchio per rispondere)
cccicccio
2008-02-26 16:19:54 UTC
Permalink
Come avrete capito sono agli inizi...
Ho una curiosità da chiedervi:
Mettiamo che io abbia realizzato un ciclo infinito che per esempio
scrive "ciao" di continuo senza interrompersi mai. Vorrei sapere come
potre intervenire su tale ciclo perchè resti infinito ma che tra una
scritta ed un'altra faccia passare un tempo da me scelto (ad esempio 5
secondi).
Credo si debba usare qualche funzione del modulo time. Cercando nella
documentazione di riferimento non ci ho capito molto. Qualcuno di voi
potrebbe aiutarmi?
Grazie.

Ovviamente quello di sopra è un esempio puramente
didattico...ihihihih... spero di fare qualcosa di più sensato!
Umberto Carrara
2008-02-26 16:22:22 UTC
Permalink
Post by cccicccio
Come avrete capito sono agli inizi...
Mettiamo che io abbia realizzato un ciclo infinito che per esempio
scrive "ciao" di continuo senza interrompersi mai. Vorrei sapere come
potre intervenire su tale ciclo perchè resti infinito ma che tra una
scritta ed un'altra faccia passare un tempo da me scelto (ad esempio 5
secondi).
Credo si debba usare qualche funzione del modulo time. Cercando nella
documentazione di riferimento non ci ho capito molto. Qualcuno di voi
potrebbe aiutarmi?
Grazie.
Ovviamente quello di sopra è un esempio puramente
didattico...ihihihih... spero di fare qualcosa di più sensato!
passavo di quì...


import time

ora=time.time()
dopo=ora+20 #20 secondi
while(time.time()<=dopo):
print "aspetto"

per il conoscere il modulo time nella shell di python
help(time)

spero di esserti stato utile
ciao
Umberto
cccicccio
2008-02-26 16:39:33 UTC
Permalink
Il programmino scrittomi non fa ciò che ho chiesto...
Io voglio che il ciclo resti infinito ma che si interroma e riprenda
ogni 5 secondi, no che duri 5 secondi.
Grazie
Marco Mariani
2008-02-26 16:45:10 UTC
Permalink
Post by cccicccio
Il programmino scrittomi non fa ciò che ho chiesto...
Io voglio che il ciclo resti infinito ma che si interroma e riprenda
ogni 5 secondi, no che duri 5 secondi.
Forse signal.alarm() ?

Ti fai inviare un segnale a tempo, e lo gestisci da un handler.
dialUAZ###UZ#$ (Valentino Volonghi aka Dialtone)
2008-02-26 17:25:45 UTC
Permalink
Post by Marco Mariani
Post by cccicccio
Il programmino scrittomi non fa ciò che ho chiesto...
Io voglio che il ciclo resti infinito ma che si interroma e riprenda
ogni 5 secondi, no che duri 5 secondi.
Forse signal.alarm() ?
Ti fai inviare un segnale a tempo, e lo gestisci da un handler.
Ma non stiamo complicando un po' la cosa? :)
--
Valentino Volonghi aka Dialtone
http://stacktrace.it -- Aperiodico di resistenza informatica
Blog: http://www.twisted.it/
http://iccfriends.net/friend/Dialtone
Umberto Carrara
2008-02-26 16:42:09 UTC
Permalink
Post by cccicccio
Il programmino scrittomi non fa ciò che ho chiesto...
Io voglio che il ciclo resti infinito ma che si interroma e riprenda
ogni 5 secondi, no che duri 5 secondi.
Grazie
la libreria è sempre time il mio programma era solo dimostrativo....
ciao
Umberto
cccicccio
2008-02-26 16:59:17 UTC
Permalink
ho fatto così:
import time
n = 0
ora = time.time()
while n==0:
if (time.time()-ora) >= 5:
print "ciao"
ora = time.time()


Non so quanto sia elegante ma funziona...ihihihih
Umberto Carrara
2008-02-26 18:36:46 UTC
Permalink
Post by Umberto Carrara
import time
n = 0
ora = time.time()
print "ciao"
ora = time.time()
Non so quanto sia elegante ma funziona...ihihihih
ma help(time) per vedere le funzioni no?

import time

while(true):
print "ora stampo poi aspetto"
time.sleep(5)

ciauz

Umberto
Nicola Larosa
2008-02-26 21:52:59 UTC
Permalink
Post by Umberto Carrara
Post by Umberto Carrara
import time
n = 0
ora = time.time()
print "ciao"
ora = time.time()
Non so quanto sia elegante ma funziona...ihihihih
Controlla l'occupazione di CPU, sarà al 100%. E` un busyloop, spreco inutile
di energia.

Inoltre quel lavoro con "n" non serve, basta scrivere
Post by Umberto Carrara
ma help(time) per vedere le funzioni no?
import time
print "ora stampo poi aspetto"
time.sleep(5)
O anche il modulo sched:

http://docs.python.org/lib/module-sched.html
--
Nicola Larosa - http://www.tekNico.net/

Live by the penguin, die by the penguin.
-- Mark Pilgrim, October 2007
cccicccio
2008-02-27 10:47:30 UTC
Permalink
Perfetto era proprio quello che cercavo!!!!
Ora però mi sorge un piccolo problemino.
Vi spiego cosa dovrei fare.
Ho un programma scaricato da internet che interpreta un file di testo
leggendone le istruzioni linea dopo linea ed alla fine crea una
immagine 3D in un widget realizzato in Tkinter di un oggetto usando le
Opengl.
Io non posso intervenire sul modulo che interpreta il file di testo.
Quello che vorrei fare è realizzare l'immagine 3D non solo a lettura
ultimata ma durante la fase di interpretazione durante i vari
passaggi.
Non so se sono stato chiaro.
Poichè la fase di interpretazione è all'interno di un ciclo avevo
pensato di richiamare la funzione (IMAGE) che crea l'immagine 3D ad
ogni passaggio ma quello che avviene è che il programma passa alla
linea successiva senza aver il tempo di visualizzare l'immagine
desiderata.
Avevo quindi pensato di inserire il comando time.sleep(5) subito dopo
aver richiamato IMAGE pensando che così in quei 5 secondi si
riuscisse a creare l'immagine ma evidentemente questo comando blocca
pure l'esecuzione della funzione richiamata.
.
.
IMAGE(minx, maxx, miny, maxy, defzmin, defz, cx, cy, resp, ts, ts0,
res, a)
time.sleep(5)
.
.
So che esposto così il problema non è di facile comprensione, ma spero
di esser stato almeno un pochino capito.
Glauco
2008-02-27 10:57:11 UTC
Permalink
Post by cccicccio
Perfetto era proprio quello che cercavo!!!!
Ora però mi sorge un piccolo problemino.
Vi spiego cosa dovrei fare.
Ho un programma scaricato da internet che interpreta un file di testo
leggendone le istruzioni linea dopo linea ed alla fine crea una
immagine 3D in un widget realizzato in Tkinter di un oggetto usando le
Opengl.
Io non posso intervenire sul modulo che interpreta il file di testo.
Quello che vorrei fare è realizzare l'immagine 3D non solo a lettura
ultimata ma durante la fase di interpretazione durante i vari
passaggi.
Non so se sono stato chiaro.
Poichè la fase di interpretazione è all'interno di un ciclo avevo
pensato di richiamare la funzione (IMAGE) che crea l'immagine 3D ad
ogni passaggio ma quello che avviene è che il programma passa alla
linea successiva senza aver il tempo di visualizzare l'immagine
desiderata.
Avevo quindi pensato di inserire il comando time.sleep(5) subito dopo
aver richiamato IMAGE pensando che così in quei 5 secondi si
riuscisse a creare l'immagine ma evidentemente questo comando blocca
pure l'esecuzione della funzione richiamata.
.
.
IMAGE(minx, maxx, miny, maxy, defzmin, defz, cx, cy, resp, ts, ts0,
res, a)
time.sleep(5)
se la funzione IMAGE inizia e termina il processing dell'immagine nello
stesso thread del chiamante, lo sleep non ti serve ad un tubo perchè
python passa all'operazione sucessiva solo dopo aver ricevuto un return
dalla chiamata ( la IMAGE in questo caso ).
Il problema è da cercare nelle specifiche di IMAGE, non è che devi fare
una qualche init prima? sicuro che la IMAGE la puoi chiamare n volte ?


Glauco
daniele
2008-03-02 17:19:52 UTC
Permalink
Post by cccicccio
Perfetto era proprio quello che cercavo!!!!
Ora però mi sorge un piccolo problemino.
Vi spiego cosa dovrei fare.
Ho un programma scaricato da internet che interpreta un file di testo
leggendone le istruzioni linea dopo linea ed alla fine crea una
immagine 3D in un widget realizzato in Tkinter di un oggetto usando le
Opengl.
Io non posso intervenire sul modulo che interpreta il file di testo.
Quello che vorrei fare è realizzare l'immagine 3D non solo a lettura
ultimata ma durante la fase di interpretazione durante i vari
passaggi.
Non so se sono stato chiaro.
Poichè la fase di interpretazione è all'interno di un ciclo avevo
pensato di richiamare la funzione (IMAGE) che crea l'immagine 3D ad
ogni passaggio ma quello che avviene è che il programma passa alla
linea successiva senza aver il tempo di visualizzare l'immagine
desiderata.
Fores devi eseguire un update() dopo aver aggiunto un elemento...

Ciao

Daniele

Glauco
2008-02-26 17:00:59 UTC
Permalink
Post by cccicccio
Come avrete capito sono agli inizi...
Mettiamo che io abbia realizzato un ciclo infinito che per esempio
scrive "ciao" di continuo senza interrompersi mai. Vorrei sapere come
potre intervenire su tale ciclo perchè resti infinito ma che tra una
scritta ed un'altra faccia passare un tempo da me scelto (ad esempio 5
secondi).
Credo si debba usare qualche funzione del modulo time. Cercando nella
documentazione di riferimento non ci ho capito molto. Qualcuno di voi
potrebbe aiutarmi?
Grazie.
Ovviamente quello di sopra è un esempio puramente
didattico...ihihihih... spero di fare qualcosa di più sensato!
Post by Umberto Carrara
import time
print time.sleep.__doc__
sleep(seconds)

Delay execution for a given number of seconds. The argument may be
a floating point number for subsecond precision.




il tuo programma è:

import time
while 1:
print 'ciao'
time.sleep(5)




Glauco
Continua a leggere su narkive:
Loading...