Re: [Python] mod_python ed il giusto handler
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
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
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
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
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
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
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
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
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