[Python] Gestire eventi con callback
Alessandro Re
ale a ale-re.net
Dom 8 Mar 2015 18:24:37 CET
2015-03-08 15:12 GMT+00:00 Marco Giusti <marco.giusti a posteo.de>:
> Così come registri una callback, così la rimuovi. Se non riesci a
> definire formalmente un ciclo di vita per i tuoi oggetti, allora è
> probabile che nel tuo design qualcosa sia sbagliato.
> Fossi in te inizierei con una implementazione di questo tipo. Se è vero
> che è primitiva, le specifiche non sembrano ancora definite e trovo
> inutile andare a complicarsi troppo la vita. Scrivi un paio di test,
> vedi se il codice che viene fuori è soddisfacente o se richiede qualche
> hack non troppo elegante e parti da lì per migliorarlo.
Bene, il codice che mi hai dato è chiaro e fa decisamente il suo
lavoro, però forse questa volta stavo mirando a complicarmi la vita
senza motivo (forse, dentro di me, stavo cercando di replicare un
meccanismo "signals-and-slots")... Ma questi due consigli che mi hai
dato valgono molto: per quanto semplici, mi rimettono un po' i
prospettiva :)
> Per un momento ho creduto che "go" fosse il linguaggio. Non conosco
> nonlocal ma hai ragione se dici che c'è un errore grossolano. Più o meno
> è questo che avevo in mente, ma non avendo neanche provato il
> codice...
>
> def send_data_blocking(data):
> def go():
> free_to_go[0] = True
> free_to_go = [False]
> send_data(data, callback=go)
> while not free_to_go[0]:
> sleep(0.1)
Sì, é che uso Python 3 e nonlocal sostanzialmente fa il lavoro di
global in uno scope non-globale (tipo questo caso, con una chiusura).
Evita di dover usare la lista come hai mostrato - ma stavo solo
facendo il pignolo :)
Ancora mille grazie
~Ale
Maggiori informazioni sulla lista
Python