Document Actions

Pensiero asincrono

by Maurizio Delmonte last modified 2008-09-03 17:36

come realizzare un'applicazione complessa e piena di calcoli senza complicarsi troppo la vita.

Pensiero asincrono

http://www.flickr.com/photos/damienjones/2331342389/

Fino a che si tratta di permettere ad un utente di caricare una pagina web di qualche K sul vostro portale, l'argomento di questo post non risulterà molto interessante.

Immaginate invece di dover permettere l'upload e la successiva elaborazione di file di qualche decina di Mega, senza che il vostro utente si addormenti davanti allo schermo, o peggio ancora pensi bene di ripetere la procedura perchè il sistema dopo un paio di minuti ancora non gli ha risposto..

In tal caso lo spazio di una request non sarà abbastanza, e il trucco su cui probabilmente saremo d'accordo consisterà nel cercare di separare la fase di elaborazione da quella di pura interazione con l'utente, potendo così offrire un feedback immediato al termine dell'upload e molto prima che tutte le successive fasi di elaborazione siano completate.

Venendo poi ad un uso "professionale" di Zope, potrebbe esservi capitato che elaborazioni batch di migliaia di oggetti nella stessa transizione possono facilmente portare a conflict error nella sessione verso il database ZODB. Ancora una volta, poter separare la richiesta di attivare una certa elaborazione dall'istante in cui questa viene eseguita potrebbe essere l'uovo di colombo del caso..

Dopo questa lunga introduzione spero sia chiara l'importanza di un meccanismo capace di operare per noi attività "schedulate" in precedenza.

Tarek Ziade in un suo post parla diffusamente di una sua proposta in tal senso, e delle varie alternative per risolverla. Tali alternative sono state anche in parte valutate al Plone 3 Paris Sprint.

Alla fine noi abbiamo scelto di seguire la strada di lovely.remotetask, un pacchetto pensato per Zope 3, utilizzabile anche in Zope 2.9 e 2.10 grazie all'ottimo lavoro di alcuni mitici volontari..

Purtroppo non abbiamo trovato egg pronte per i porting, per questo è necessario installare a mano il pacchetto nell'istanza zope.

Ah! se vi state chiedendo come si usa un simile pezzo di software, date uno sguardo al README, e non dimenticate l'esempio bell'e pronto che viene fornito in dotazione!