[PIPython] testing di applicazioni asincrone ?

Valentino Volonghi dialtone
Ven 19 Nov 2004 15:16:54 CET


On Wed, 27 Oct 2004 14:56:12 +0200, Andrea Manzini <amanzini a quercia.it> wrote:

> ti ringrazio per la risposta, provero' a dare un'occhiata a "trial". Vorrei
> approfondire un pochino la tua osservazione delle ultime due righe: potrei
> essere d'accordo sul "piu' produttivo", magari sul "brutto" possiamo
> discutere... Ma perche' "lento" ? A quanto mi risulta, asyncore non e'
> altro che un leggero wrapper attorno alla funzione di sistema poll()... Per
> quale motivo dovrebbe essere meno performante di Twisted ? E cosa intendi
> con "funziona meglio" ?
> 
> grazie infinite per i chiarimenti... :)

Si, asyncore e` un wrapper sopra poll() ed e` lento perche` il codice
che ci metterai sopra potrebbe non gestire adeguatamente il buffering
e tante altre simpatiche cose, sulle quali, i programmatori di twisted
(me compreso), sbattono la testa... La poll o la select o la epoll o
libevent o tanti altri metodi di gestire piu` socket in modo
asincrono, sono tutti bene o male equivalenti. Cio` che davvero fa la
differenza e` il codice che sta sopra prima di arrivare alla tua
applicazione. Twisted, ad esempio, e` in grado di ottimizzare al
meglio sia tante scritture piccole consecutive che una sola scrittura
molto grossa, appunto col buffering.

Tra le altre cose, recentemente c'e` stata una discussione su
Twisted-Python che riguardava la sostituzione di asyncore con il core
dei reactor di twisted che e` mille volte migliore. Anthony Baxter
(release manager di python) si e` detto ampiamente disposto a
deprecare asyncore per python 2.5 e a rimuoverlo per python 2.6 in
favore di una soluzione apposita di twisted.core, cosa facilitata
anche dal molto prossimo spacchettamento dei fare prodotti dei twisted
labs.

Funziona meglio inoltre perche` twisted e` scritto in modo da renderti
totalmente trasparente i socket che girano sotto (quasi totalmente se
scrivi protocolli), in quanto e` lui che si occupa del dispatch degli
eventi e di tanti altri 'dettagli' come la gestione delle eccezioni e
compagnia bella. Twisted in pratica ha gia` implementate dentro di se
talmente tante cose (e soluzioni a problemi di python) da rendere
inutile il ricorso a librerie esterne per implementare funzionalita`
mancanti (fino a un certo limite). Ad esempio, la mancanza delle
continuations in python e` risolta usando le deferred in twisted. Poi
ci sono altri fattori ma twisted e` abbastanza grosso e spiegare tutto
qua e` riduttivo :P.

-- 
Valentino Volonghi aka Dialtone
Now running FreeBSD 5.3-beta6
Blog: http://vvolonghi.blogspot.com
Home Page: http://xoomer.virgilio.it/dialtone/



More information about the Python mailing list