[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