[Python] Precisione di time.time()

2008-08-22 Per discussione Listemessaggi CoPlast
Un saluto a tutti.
Avete idea di quale potrebbe essere la precisione della suddetta funzione?
Avrei bisogno di misurare in continuo tempi molto piccoli (decimi di 
millisecondo), secondo voi si può fare?
Devo per forza usare un kernel con patch RTAI e software scritto in C e 
poi usato da python (con swig)? Sto provando quest'ultima strada ma per 
le mie competenze la vedo dura. Vorrei usare solo python se esistesse 
una soluzione al problema.

Grazie in anticipo per i consigli.


Matteo.


P.S. Riporto di seguito il codice che sto usando per fare questi test.



import time

def adesso():
return time.time() * 1E9

def aspetta(vel = 0):
if vel == 0:
time.sleep(0.0001)
elif vel == 1:
pass

delta_pausa = []

def calibra_timer():
for i in range(2):
inizio = adesso()
aspetta(i)
fine = adesso()
delta_pausa.append(fine - inizio)

def pausa(t):
inizio = adesso()
def step(va):
aspetta(va)
fine = adesso()
return fine
va = 1
fine = step(va)
while t > fine - inizio:
fine = step(va)
if t - (fine - inizio) > 1.25 * delta_pausa[0]:
va = 0
else:
va = 1


 
def inizializzazione():
calibra_timer()
#num_io = 24
#for i in range(num_io):
#   io.append(0)

inizializzazione()

inizio = adesso()
pausa(1.234567891 * 1E9 * 10)
fine = adesso()
print fine - inizio

inizio = adesso()
for i in range (1000):
pausa(1.234567891 * 1E9 * 0.01)
fine = adesso()
print fine - inizio
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python


Re: [Python] Precisione di time.time()

2008-08-22 Per discussione Manlio Perillo
Listemessaggi CoPlast ha scritto:
> Un saluto a tutti.
> Avete idea di quale potrebbe essere la precisione della suddetta funzione?


E' scritto nella documentazione: 1 secondo.
Dovresti usare la funzione clock, mai time, per calcolare degli 
intervalli temporali.
La precisione di clock non è definita da POSIX, ma con una ricerca puoi 
trovare la precisione reale sui diversi sistemi operativi.


> Avrei bisogno di misurare in continuo tempi molto piccoli (decimi di 
> millisecondo), secondo voi si può fare?

Non so se abbia molto senso in Python, con tutto l'"ingombro" 
dell'interprete.

Volendo puoi usare alcune funzioni POSIX per una definizione maggiore, 
ma se resti in Python clock dovrebbe essere più che sufficiente.

Ad esempio:
http://www.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html
se vuoi un equivalente di time, con risoluzione maggiore (ma la 
risoluzione non è definita da POSIX).

Oppure:
http://www.opengroup.org/onlinepubs/009695399/functions/clock_getres.html
se vuoi un equivalente di clock ad alta risoluzione.

Esempio in D: http://paste.pocoo.org/show/83035/
Ricordati di linkare alla librt, su Linux.



Il risultato che ottengo:
clock_getres CLOCK_REALTIME, sec: 0, nsec 1
clock_getres CLOCK_PROCESS_CPUTIME_ID, sec: 0, nsec 1
clock_gettime CLOCK_PROCESS_CPUTIME_ID, sec: 0, nsec 1430007
clock_gettime CLOCK_PROCESS_CPUTIME_ID, sec: 0, nsec 1445541
elapsed: 0:15534

Tuttavia è probabile che ci sia qualcosa che non va, dato che a volte 
ottengo:
clock_gettime CLOCK_PROCESS_CPUTIME_ID, sec: 0, nsec 75629
clock_gettime CLOCK_PROCESS_CPUTIME_ID, sec: 0, nsec 75630
elapsed: 0:1

e non mi sembra ragionevole.

> Devo per forza usare un kernel con patch RTAI e software scritto in C e 
> poi usato da python (con swig)? 

Dipende da cosa devi fare.
Ti consiglio di dare una occhiata a D, invece che usare C.


 > [...]



Manlio Perillo
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python