[Python] come ripeto una funzione dopo un certo intervallo di tempo?

Manlio Perillo manlio_perillo a libero.it
Lun 16 Lug 2007 11:28:13 CEST


allanon ha scritto:
> Sun 15 July 2007, alle 16:47 +0200, Eriol ha scritto:
>> On Friday 13 July 2007, allanon wrote:
>>> come potrei fare?
>> Importare dal modulo threading:
>>
>> from threading import Timer
>>
> 
> ti ringrazio per la dritta,
> infatti ho altre due domande per te :)
> 
> 1) come diavolo fai a saperlo dato che nella pagine online di reference
> non c'e' scritto :p
> 
> 2)
> 
> questa e' la parte incriminata del mio codice
> 
> if __name__ == '__main__':
> # creo l'oggetto database
>    db = MySQLdb.connect(host = HOST,
>       user = USER,
>       passwd = PASSWD,
>       db=DATABASE
>       )
>    c=db.cursor() # crea il cursore
>    t = Timer(5.0, Repeated_Function(c))
>    t.start()
> 
> 
> lancio lo script,
> viene eseguita la Repeated_Function per 1 volta
> dopo 5 secondi ottengo questo errore
> 
> Traceback (most recent call last):
>   File "threading.py", line 442, in __bootstrap
>     self.run()
>   File "threading.py", line 607, in run
>     self.function(*self.args, **self.kwargs)
> TypeError: 'NoneType' object is not callable
> 
> 
> la connessione al db dovrebbe essere sempre attiva giusto?
> e lo stesso dovrebbe valere per il cursore,
> non capisco cosa non funziona O_O
> 

L'errore ti è già stato segnalato.
Comunque io farei molta attenzione ad usare i thread.

Innanzitutto tu crei un cursore nel thread principale e poi lo passi ad 
un altro thread.

pySQLite, ad esempio non permette questa operazione.
In molte altre librerie, inoltre, il cursore non è thread safe (ossia 
avrai problemi se due thread accedono allo stesso cursore).

Vedi cosa restituisce la variabile MySQLdb.threadsafety
(http://python.org/dev/peps/pep-0249/)

Cosa fa, in dettaglio, Repeated_Function?
Cosa fa, invece, il thread principale?


Io passarei al thread secondario l'oggetto connessione, oppure la 
connessione la creerei direttamente nel thread (se deve essere usata 
solo qui).

Un'ultima cosa: i nome delle funzioni non dovrebbero iniziale con una 
lettara maiuscola: http://python.org/dev/peps/pep-0008/


Entrambi i PEP sono anche stati tradotti in italiano, ma al momento non 
ci sono link diretti sul sito.



Saluti  Manlio Perillo


Maggiori informazioni sulla lista Python