Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Andrea Giammarchi

Lawrence Oluyede ha scritto:

Il punto è che in un fw è tutto più organico, tutto qui. Ma sembra che
tu non voglia usare un fw a tutti i costi, mi sbaglio? 
no, non sbagli, devo fare un qualcosa di portabile, non basato su alcun 
framework, per fare questo devo evitare di basarmi a mia volta su un fw.




Non è che hai un intero fw in memoria eh. Solo che mod_python è un
layer sopra Apache e non mi è mai piaciuto molto. Preferisco qualcosa
di minimale come CherryPy allora che è più Pythonico.
CherryPy è molto interessante, soprattutto perchè leggero e presumo 
portabile senza richiedere Apache o altri webservers (vorrei testarlo su 
CD o pendrive, sarebbe veramente divertente svilupparci sopra).


Apache invece è il webserver più usato e noto della rete e mod_python è 
un sotto progetto della Apache stessa.

Questo mi porta a pensare che:
1 - se devo imparare ora qualcosa su Python per il web, tanto vale 
scegliere il progetto sulla quale investirei (o meglio investono) di più 
(progetto ufficiale di un webserver che punta molto su questo stesso)
2 - se devo creare una libreria portabile, tanto vale crearla su misura 
per il modulo usato dal webserver più noto (per poi adattarla 
eventualmente su altri fw, dove le cose sono parzialmente fatte)
3 - se dovessi scegliere un webserver, già che sto imparando qualcosa, 
sceglierei un server Linux con Apache e mod_python, che è "mission 
critical ready" e che presumo a breve verrà sempre più sfruttato


Detto questo ho letto solo oggi che PSP sarebbe mod_psp, integrato da 
non molto in mod python ... non so quindi quanto sia maturo / affidabile 
performante, ma il fatto del C dietro l'intero modulo, mi fa pensare sia 
la scelta migliore per semplicità e prestazioni, in grado di battersela 
con C#, J2EE o altri, sicuramente kilometri sopra le performance 
deludenti del PHP (sto anche tentando di migrare dal PHP perchè mi sta 
facendo imbestialire ogni giorno di più ... pensavo di passare a C# per 
richiesta e presenza in rete ma C# è lievemente prolisso anche per le 
cose semplici e non mi sta quindi molto simpatico)


Ora non mi resta che trovare documentazione decente sul modulo, quella 
ufficiale non è molto utile ... :-(


Ogni link su classi, dettagli di configurazione o altro è bene accetto, 
io mi ritrovo sempre nelle stesse pagine che dicono tanto e non 
approfondiscono quasi niente.


Saluti,
   Andrea Giammarchi
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Manlio Perillo
Andrea Giammarchi ha scritto:
> Lawrence Oluyede ha scritto:
>> Il punto è che in un fw è tutto più organico, tutto qui. Ma sembra che
>> tu non voglia usare un fw a tutti i costi, mi sbaglio? 
> no, non sbagli, devo fare un qualcosa di portabile, non basato su alcun
> framework, per fare questo devo evitare di basarmi a mia volta su un fw.
> 

Dai un occhio anche a Twisted.
Twisted *è* un framework, ma non uno qualsiasi.

Il problema è che vive in un mondo tutto suo (asincrono) ed è difficile
adattare delle librerie sincrone.

Twisted ha un server web (twisted.web ora in fase di riscrittura verso
twisted.web2) interamente scritto in Python che ti da una flessibilità
probabilmente senza pari.
E le performance sono buone, appunto perchè sfrutta il modello asincrono.

C'è anche un web toolkit, Nevow, piuttosto unico nel suo genere (a molti
non piace).

> 
>> Non è che hai un intero fw in memoria eh. Solo che mod_python è un
>> layer sopra Apache e non mi è mai piaciuto molto. Preferisco qualcosa
>> di minimale come CherryPy allora che è più Pythonico.
> CherryPy è molto interessante, soprattutto perchè leggero e presumo
> portabile senza richiedere Apache o altri webservers (vorrei testarlo su
> CD o pendrive, sarebbe veramente divertente svilupparci sopra).
> 

Il webserver serve, altrimenti come fai?
Quello usato di default da CherryPy mi sembra sia il server HTTP
presente nella libreria standard.

> Apache invece è il webserver più usato e noto della rete e mod_python è
> un sotto progetto della Apache stessa.

Si, ma Lighttpd sembra stia avendo un discreto successo, ed è molto più
leggero.

E per interfacciarsi a Ligttpd si usa SCGI o FASTCGI.
Ci sono un paio di package che implementano un server per questi due
protocolli, offrendo una interfaccia WSGI
(Python Web Server Gateway Interface v1.0, PEP 333,
http://www.python.org/dev/peps/pep-0333/)

WSGI è la chiave per la portabilità.


> Questo mi porta a pensare che:
> 1 - se devo imparare ora qualcosa su Python per il web, tanto vale
> scegliere il progetto sulla quale investirei (o meglio investono) di più
> (progetto ufficiale di un webserver che punta molto su questo stesso)
> 2 - se devo creare una libreria portabile, tanto vale crearla su misura
> per il modulo usato dal webserver più noto (per poi adattarla
> eventualmente su altri fw, dove le cose sono parzialmente fatte)
> 3 - se dovessi scegliere un webserver, già che sto imparando qualcosa,
> sceglierei un server Linux con Apache e mod_python, che è "mission
> critical ready" e che presumo a breve verrà sempre più sfruttato
> 

Come ti è già stato detto, mod_python è a basso livello.
Se la gente passa a Python da PHP è per usare qualcosa che funzioni
meglio su larga scala.

> Detto questo ho letto solo oggi che PSP sarebbe mod_psp, integrato da
> non molto in mod python ... non so quindi quanto sia maturo / affidabile
> performante, ma il fatto del C dietro l'intero modulo, mi fa pensare sia
> la scelta migliore per semplicità e prestazioni, in grado di battersela
> con C#, J2EE o altri, sicuramente kilometri sopra le performance
> deludenti del PHP 

Guarda che come performance assolute Python non è meglio di PHP.
Tempo fa qualcuno ha fatto dei semplici test.

Occhio alla parola "semplici".
In realtà un test per avere significato deve essere su una applicazione
significativa.

> (sto anche tentando di migrare dal PHP perchè mi sta
> facendo imbestialire ogni giorno di più ... pensavo di passare a C# per
> richiesta e presenza in rete ma C# è lievemente prolisso anche per le
> cose semplici e non mi sta quindi molto simpatico)
> 
> Ora non mi resta che trovare documentazione decente sul modulo, quella
> ufficiale non è molto utile ... :-(
> 
> Ogni link su classi, dettagli di configurazione o altro è bene accetto,
> io mi ritrovo sempre nelle stesse pagine che dicono tanto e non
> approfondiscono quasi niente.
> 


Per prima cosa devi conoscere bene Apache.
mod_python non mi sembra poi così complicato.



Saluti  Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Lawrence Oluyede

no, non sbagli, devo fare un qualcosa di portabile, non basato su alcun
framework, per fare questo devo evitare di basarmi a mia volta su un fw.


Mi sfugge cosa intendi per portabile a questo punto.


1 - se devo imparare ora qualcosa su Python per il web, tanto vale
scegliere il progetto sulla quale investirei (o meglio investono) di più
(progetto ufficiale di un webserver che punta molto su questo stesso)


mod_python è solo un progetto dei tanti, non c'è niente di ufficiale.


2 - se devo creare una libreria portabile, tanto vale crearla su misura
per il modulo usato dal webserver più noto (per poi adattarla
eventualmente su altri fw, dove le cose sono parzialmente fatte)


Continuo a non capire cosa intendi per portabile


--
Lawrence
http://www.oluyede.org/blog
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Marco Mariani
Lawrence Oluyede wrote:
>> - ce ne sono altri ??? ... qual'è il più usato ?
> Django :-)
Io sto sperimentando turbogears con sqlalchemy e _totale_ introspezione
di un DB gia' esistente, piuttosto complesso (una cinquantina di tabelle
pesantemente relazionate) e sono piacevolmente basito dalla
flessibilita' di SA. Qualcuno l'ha anche usato con Django, ma non so come

>> insomma, vorrei avere pareri o opinioni su un modo di sfruttare python
>> nel web piuttosto che un altro ... voi cosa avete scelto ?
> Io non ho ancora scelto a dire il vero dato che ho fatto un annetto
> senza fare roba Web. Ora sto usando Nevow per una roba ma mi parlano
> tutti bene di Django e l'ho visto usare con profitto.
Posto che sono tutti validi, dal punto di vista dell'impegno necessario
per "avere qualcosa subito", la scaletta e' Django -> TG -> Z3
(a meno che non si conoscano gia' SQLObject / SQLAlchemy / Kid /
FormEncode / MochiKit)

>> Zope, ad esempio, è basato mod_python.publisher ?
> Zope è tutto un altro mondo, ma direi che non fa per te
Zope3 e' quattro spanne sopra tutti, da li' si vede un bel panorama...
ma per la maggior parte delle applicazioni e' "troppo".


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Andrea Giammarchi

Lawrence Oluyede ha scritto:

Mi sfugge cosa intendi per portabile a questo punto.

intendo usabile dal basso livello (mod_python) all'alto (fw)


mod_python è solo un progetto dei tanti, non c'è niente di ufficiale.
come sotto progetto di Apache stessa ? ... ho letto solo di mod_python, 
ce ne sono altri ?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] mod_python psp VS mod_php

2006-08-17 Per discussione Andrea Giammarchi

Manlio Perillo ha scritto:

Guarda che come performance assolute Python non è meglio di PHP.
Tempo fa qualcuno ha fatto dei semplici test.

Occhio alla parola "semplici".
In realtà un test per avere significato deve essere su una applicazione
significativa.

vista questa risposta, mi son messo giù a fare un bench molto semplice.

il bench non fa altro che creare una stringa lunga, scriverla su un 
file, rileggerla dal file, parsarla con una regexp, splittarla o 
lavorarla per un numero preassegnato di volte.


Queste operazioni sono quasi la routine per tanti sistemi fw in php 
basati su template engines, la scrittura di tutto ad esempio è una 
peculiarità di MovableType.
Python su psp sfrutterebbe direttamente il C per parsare il file ed 
assegnare i valori come template engine, quindi mi è sembrato inutile 
paragonarli per caratteristiche, ho preferito paragonarli per similitudini.


Non ho testato un db perchè credo che i wrapper siano molto simili 
(sqlite, mysql, postgre) e la differenza la fa più il db che il 
linguaggio stesso (anche se la manipolazione gestione dei risultati 
potrebbe sicuramente dare qualche spunto in più per le conclusioni sul 
confronto)


Il test è stato fatto sullo stesso PC (centrino 1.6 con hd lento da 
5.400 rpm, 1Gb di RAM) con lo stesso Apache (2.0 che php in 2.2 ancora 
non gira o comunque ha diversi problemi)


Pagina bench.psp
<%
import time, re

# test "char by char" [python emula il tst in php ed è costretto a 
sfruttare una stringa e una lista]

def bench1(times, path):
   benchtime = getTime(None)
   b = 0
   tmp = ''
   tmpl = []
   for a in range(0, times):
   tmp = readWriteBench(path)
   b = len(tmp)
   for a in range(0, b):
   tmpl.append(tmp[a])
   tmpl[a] = ' '
   tmp = ''.join(tmpl).strip()
   return str(getTime(benchtime))

# test identico [python e php fanno esattamente le stesse cose ma python 
ha una funzione in più da gestire, la file_get_contents]

def bench2(times, path):
   benchtime = getTime(None)
   a = 0
   b = 0
   tmp = []
   while a < times:
   tmp = readWriteBench(path).split("\r\n")
   a = a + 1
   a = 0
   b = len(tmp)
   while a < b:
   tmp[a] = ' '
   a = a + 1
   tmp.append(''.join(tmp).strip())
   return str(getTime(benchtime))

# test pitoniano [python come l'avrei scritto per fare il secondo test]
def bench3(times, path):
   benchtime = getTime(None)
   tmp = []
   for a in range(0, times):
   tmp = readWriteBench(path).split("\r\n")
   for a in range(0, len(tmp)):
   tmp[a] = ' '
   tmp.append(''.join(tmp).strip())
   return str(getTime(benchtime))

# funzione analoga
def getTime(startTime):
   newtime = time.clock()
   if startTime != None:
   newtime = newtime - startTime
   return newtime

# funzione python, in core in php
def file_get_contents(fileName):
   fp = file(fileName, 'r')
   source = fp.read()
   fp.close()
   return source

# funzione analoga
def readWriteBench(path):
   writeBench(path)
   return re.sub("__([0-9]+)__\r\n", "\\1", file_get_contents(path + 
'/test.py.txt'))


# funzione analoga
def writeBench(path):
   astr = []
   for a in range(0, 1):
   astr.append("__%i__\r\n" % a)
   fp = file(path + '/test.py.txt', 'w')
   fp.write(''.join(astr))
   fp.close()

# path del file (http://localhost/python/)
path = os.path.abspath('./htdocs/python/')

times = 20 # 50, 100 per differenza più consistente
req.write(bench1(times, path))
req.write("")
req.write(bench2(times, path))
req.write("")
req.write(bench3(times, path))
%>


Pagina bench.php
   return preg_replace("/__([0-9]+)__\r\n/", "\\1", 
file_get_contents('test.php.txt'));

}

# funzione analoga
function writeBench() {
   $astr = array();
   for($a = 0; $a < 1; $a++)
   array_push($astr, "__{$a}__\r\n");
   $fp = fopen('test.php.txt', 'w');
   fwrite($fp, implode('', $astr));
   fclose($fp);
}

$times = 20; # 50, 100 per differenza più consistente
echo bench1($times);
echo '';
echo bench2($times);
echo '';
echo bench3($times);
?>

Magari non sarà il migliore dei tests .. di fatto i risultati sono stati:
1 - picco di quasi 7 mega di ram rubati dal PHP durante il test contro i 
quasi 200Kb presi in prestito dal python
2 - mezzo secondo di differenza, tendente all' uno con 50 interazioni, 2 
quasi e mezzo con 100 interazioni a vantaggio di python


Probabilmente non ho configurato nemmeno benissimo mod_python perchè 
sebbene vada tutto, nel server mi ritrovo un CGI come configurazione 
(forse perchè comunque sfrutta l'installazione di python)



A voi commenti, consigli per altri bench o conclusioni :-)

Andrea Giammarchi



P.S. per quel che mi riguarda, che python risultasse più veloce anche in 
manipolazione consistente di stringhe, l'ho scoperto poco tempo fa con 
la SourceMap (http://www.phpclasses.org/browse/package/3279.html - c'è 
anche la versione Python)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Andrea Giammarchi

Manlio Perillo ha scritto:

Il webserver serve, altrimenti come fai?
  

si, hai ragione, intendevo uno tipo apache, non interno al python

Quello usato di default da CherryPy mi sembra sia il server HTTP
presente nella libreria standard.
  
quindi si potrebbe fare un serverino portabile con py2exe e cherrypy, 
giusto ? ... in caso approfondirò cherrypy



Come ti è già stato detto, mod_python è a basso livello.
Se la gente passa a Python da PHP è per usare qualcosa che funzioni
meglio su larga scala.
  
io vorei solo riprodurre le comodità del PHP per me, intanto, visto che 
sono abituato con quelle e che con quelle mi sono sempre trovato bene 
(GET, POST; FILE, SESSION, COOCKIE) ... a prescindere dal progettino che 
già dovrebbe andare, visto che GET e POST sono riuscito a dividerle in 
modo utile (almeno per il progettino)




Per prima cosa devi conoscere bene Apache.
mod_python non mi sembra poi così complicato.
  
non sarà complicato ma non c'è molta doc in giro  Apache lo conosco 
ma non conosco i metodi, i tipi di dato o altro sfruttabile in 
mod_python, che con Apache non c'entrano molto.


Ad esempio avessi una lista dei metodi del req sarei già "a cavallo", 
invece di tentare con mille for in alla scoperta di variabili ... (anche 
visto che Cookie e Session ci sono ... c'è poco ma ci sono metodi e opzioni)




Ciao,
   Andrea Giammarchi


P.S. il progettino si chiama ACE, altro non è che una libreria 
trasparente per richiamare methodi di classi python sul server tramite 
JS (esempio: (new MyPyClass()).getUserList()) , "un'altra cavolatina 
ajax" insomma, ma non esistono progetti analoghi o almeno non ne conosco 
e siccome per PHP m'è riuscita bene (almeno credo :D) averla su python 
potrebbe farmi fare la svolta definitiva ( uso ajax da tempo e da mesi 
sfrutto mie librerie per fare interazioni OO ... poi bisogna vedere se 
riesco a farla bene anche per C# senza muovere i kili di Kb "poco 
flessibili" di Atlas o compagnia bella :P ).
Se interessa questa è la doc semi ufficiale per php: 
http://www.3site.eu/jstests/ACE.html


La lib non è ancora stata approvata su phpclasses.org ma è già ultimata 
... per Python si parte dalla PHP_Serialize con classi e liste => array 
classi: http://www.devpro.it/code/131.html per avere un front-end JS 
portabile (1 front-end JS riutilizzabile su diversi back-end) ed uno 
scambio dati "nativo" ma non limitato come quello di JSON (ciò 
nonostante comunque rapidissimo)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Lawrence Oluyede

intendo usabile dal basso livello (mod_python) all'alto (fw)


Beh mod_python è solo basso livello, no?


come sotto progetto di Apache stessa ? ... ho letto solo di mod_python,
ce ne sono altri ?


no parlavo di ufficiale nella comunità Python

--
Lawrence
http://www.oluyede.org/blog
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] mod_python ed il giusto handler

2006-08-17 Per discussione Andrea Giammarchi

Manlio Perillo ha scritto:

Nevow Athena.
Gli sto dando un'occhiata ... l'intento è simile ma la struttura / 
utilizzo totalmente differente, ACE ha meno "sbattimento" sia client che 
server.


Se poi non interesserà a nessuno o nessuno lo userà pazienza, lo 
sfrutterò solo io :P


Cmq ACE dovrebbe poter stare anche in Nevow ed altri, intanto lo finisco 
per il mod_python poi vediamo :E



Saluti,
   Andrea Giammarchi
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python