[Python] Gestire eventi con callback

flandero flandero a gmail.com
Dom 8 Mar 2015 15:25:34 CET


Perché non fai una abstract factory per istanziare la parte in c++,
distruggendo quindi l'istanza e tutto il resto, quando necessario?
Il 08/mar/2015 15:12 "Alessandro Re" <ale a ale-re.net> ha scritto:

> Ciao Marco,
>
> intanto grazie per la risposta :)
>
> 2015-03-08 7:54 GMT+00:00 Marco Giusti <marco.giusti a posteo.de>:
> > Come registri le callback? Gli oggetti in python sono referenziati da
> > del codice python o solo dalle callback di c++? In questo caso basta
> > che, nel momento in cui distruggi l'oggetto C, deregistri le callback
> > e riduci il numero di referenze del metodo. Se i metodi di un oggetto
> > P sono usati come callback di un solo oggetto C, al momento che
> > tu rilasci tutte le callback non esistono più riferimenti all'oggetto
> > python.
>
> Il problema è proprio la registrazione delle callback... Per ora ho un
> meccanismo piuttosto primitivo:
> quando un evento accade, viene chiamato un metodo on_evento(*args) di
> python.
> L'idea è che l'oggetto tiene una lista di callback da
> chiamare per quell'evento, e quel metodo è definito più o meno come
>
> def on_evento(self, *args):
>   for callback in self._callbacks:
>     callback(*args)
>
> Però è per l'appunto primitivo, e non viene assolutamente gestita la
> rimozione delle callback. Prima di avventurarmi ed inventare qualcosa
> che cerchi di automatizzare la rimozione, volevo capire se c'era già
> qualche pattern usato in questi casi.
>
> >> Come posso rendere sincrona (bloccante) l'invocazione di un comando?
> >
> > La prima idea che mi viene in mente è di infilare la callback dentro la
> > send e di chiamare sleep per salvare qualche ciclo macchina:
> >
> >     def send_data_blocking(data):
> >         def go():
> >             free_to_go = True
> >         free_to_go = False
> >         send_data(data, callback=go)
> >         while not free_to_go:
> >              sleep(0.1)
>
> Grazie, proverò con la sleep :) (btw, in go() non ci andrebbe un
> "nonlocal free_to_go"?)
>
> Ciauz
> ~Ale
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150308/c24ca30c/attachment.html>


Maggiori informazioni sulla lista Python