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

allanon allanon a alaimo.org
Lun 16 Lug 2007 22:57:16 CEST


Mon 16 July 2007, alle 11:28 +0200, Manlio Perillo ha scritto:
> 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?
> 

Repeated funcion e' un nome del cavolo che ho messo solo perche' avevo
letto l'esempio secondo cui per usare il timer dovevo per forza usare
una funzione, quindi ne ho usata una come contenitore,
ne posso fare a meno, ne vorrei fare a meno..e' anche antiestetica sta
cosa.

cmq all'interno ci sono cavolatine + due funzioni 
con lo scopo di prendere dati dal
db ed elaborarli


se non dovessi usare sto timer, che cmq non riesco proprio a capire
dalla pagina del reference (la niubbagine non si sciacqua),
chiamerei le due funzioni direttamente da quella principale e via.


> 
> 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/
> 

Ti ringrazio tantissimo, mi serviva proprio una cosa del genere.
Tendenzialmente sono un tipo che vorrebbe essere ordinato, quando sa
come fare le cose!

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

Grazie per le dritte e la pazienza,
a te a alle altre persone che  hanno risposto.

Provero' altre soluzioni facendo tesoro dei vostri consigli.

ciao


-- 
  .''`.  |Utente Linux #370990 <--> jabber: allanonxx a jabber.org
 : :'  : |No al TC-Palladium! http://www.no1984.org/
 `. `'`  |GnuPG ID Key:(0x)A07FF2DB <-->  gpg --search-keys 0xA07FF2DB
   `-    |Fingerprint 3D2F DCD4 6AB3 9C52 995A  969E D634 02FF A07F F2DB


Maggiori informazioni sulla lista Python