[python] Python WSGI (začátečník)

Thomix thomixcz na gmail.com
Neděle Duben 25 10:48:00 CEST 2010


On Apr 25, 9:48 am, Jirka Vejrazka <jirka.vejra... na gmail.com> wrote:
> Ahoj,
>
>   4TB mesicne je v podstate nezajimavy udaj, to nic nerika o
> narocnosti jednotlivych aplikaci nebo webu. To muze udelat bittorrent
> s minimalnimi naroky na pamet a (skoro) nemeritelnou zatezi procesoru.
>
>   Zkust uvest zpracovane HTTP pozadavky za sekundu pri beznem provozu
> a ve spicce, pak se tim da nejak pracovat. Ale obecne se da rict, ze
> ani v pripade "velkych" cisel ti nikdo nerekne, ze nemas pouzit Python
> nebo PHP. I na jednoduche VPS se da na beznem webu udelat velka
> spousta optimalizaci a kesovani, ktere dokazou radove zvysit vykon.
>
>   Zkus napsat trochu vic o tom, jak ty tve weby vypadaji...
>
>    Jirka
>
> On 24/04/2010, Thomix <thomi... na gmail.com> wrote:
>
>
>
> > On Apr 24, 5:34 pm, Petr Messner <petr.mess... na gmail.com> wrote:
> >> Ahoj,
>
> >> zkusím ti to nejdřív nějak vysvětlit, pak ti odpovím na tvé konkrétní
> >> otázky a závěr ještě něco přidám. Sorry, vzhledem k formulaci a vlastně
> >> samotné existenci dotazu jsem se trochu více rozepsal.
>
> >> Pro jistotu zde uvedu definici WSGI: je to lepidlo, pomocí kterého se
> >> slepí webový server a webový framework/webová aplikace; je to proto, aby
> >> každá aplikace/každý framework nemusel znovu a znovu implementovat HTTP,
> >> FastCGI, CGI atd. Místo toho jen webserver nebo FastCGI server nebo CGI
> >> handler (nebo cokoliv) jen poskytne WSGI rozhraní a aplikace/framework už
> >> se tím nemusí zabývat.
>
> >> Ale stále toho k zabývání se ještě spousta zbývá. WSGI je low-level a
> >> nedělá nic jiného, než co jsem právě popsal. Mohl bys WSGI vzít a přidat
> >> do něj nějaké hezčí zpracování uploadu souborů, mohl bys do něj přidat
> >> spojení do databáze, logování atd., ale to už by pak nebylo hezké
> >> rozhraní, ale pěkný moloch. Byl by to webový framework. Úkolem WSGI není
> >> být webovým frameworkem, ale umožnit webovým frameworkům fungovat
> >> nezávisle na tom, jestli budou spuštěny přes CGI, FastCGI nebo nějak
> >> jinak.
>
> >> Takže:
>
> >> 1. pokud chceš v Pythonu dělat weby, nedělej je čistě ve WSGI, ale najdi
> >> si knihovnu nebo framework, která bude řešit ty nejotravnější věci (upload
> >> souborů apod.) Může to být buď full-stack framework jako třeba Django nebo
> >> Pylons, nebo to může být knihovna, která dělá primárně právě jen tohle,
> >> např. Werkzeug, Paste WebOb, yaro, ... Je toho mraky. Mezi tím jsou ještě
> >> další věci, např. CherryPy. A pak ještě speciality, jako Zope nebo
> >> Twisted.
>
> >> 2. statistiky na webu bývají pochybné kvality, nejlepší je se o výkonu
> >> něčeho přesvědčit sám. Na co psát něco ultra-efektivně, když tam stejně
> >> poleze jen deset lidí denně - místo toho to dělej tak, abys z toho měl sám
> >> radost a měl s tím co nejméně práce. Na druhou stranu, pro jakýkoliv dobře
> >> nakonfigurovaný způsob nasazení webové aplikace by neměl být problém
> >> zvádnout stovky požadavků za sekundu, a pokud bude požadavků více, stejně
> >> při takovém provozu se už asi dávno budeš poohlížet po dalším železe.
>
> >> 3. že nechceš používat mod_python já osobně chválím :) I když pro to mám
> >> jiné důvody, než statistiky na webu. WSGI je univerzálnější. (Ne že by v
> >> mod_pythonu nešel použít WSGI handler, věřím, že je zde řeč o standardním
> >> mod_python publisheru.) Mimochodem, abychom předešli obvyklému počátečnímu
> >> zádrhelu - WSGI není to samé, co mod_wsgi. Jedno je rozhraní a druhé je
> >> jedna z implementací tohoto rozhraní pro Apache.
>
> >> 4. proč ti nefunguje ten print samozřejmě nevím, ale vzhledem k tomu, že
> >> print vypisuje na standardní výstup, asi to bude tím, že svoji aplikaci
> >> spouštíš pomocí něčeho, co ten standardní výstup zavírá. Třeba kdybych já
> >> pomocí printu něco napsal, tak se mi to vypíše rovnou do konzole, kde je
> >> webovka spuštěná (tedy ne uživateli do prohlížeče), a na serveru
> >> standardní výstup bývá (když není zavřený) přesměrovaný do /dev/null,
> >> takže se to zapíše víš kam. Používat print ve webové aplikaci lze jen na
> >> ladění, jinak je to asi stejný nesmysl jako používat ho v GUI aplikacích.
> >> Jo a jestli si chtěl napsat něco jako print("<html>... kilobajty balastu
> >> ...</html>"), tak použij šablonu, je to o dost jednodušší a přehlednější
> >> :)
>
> >> Co by měl být tvůj další krok - doporučuji se podívat na Django. Je tu
> >> dost příznivců a uživatelů Djanga, takže i z tohoto pohledu je to
> >> perspektivní.
>
> >> Kdybys nechtěl jít do Djanga, tak se zkus třeba podívat
> >> nahttp://werkzeug.pocoo.org/arozklikni si to "click here to see ...", je
> >> tam docela pěkná ukázka. Jak vidíš, snadno získáš objekt Request, ve
> >> kterém je vše co potřebuješ, odpověď vracíš objektem třídy Response a co
> >> děláš mezi tím je na tobě, to ti jako PHP programátorovi přijde asi
> >> bližší. Werkzeug není zrovna hodně používaná věc, ale mě se líbí, lze na
> >> ni demonstrovat, jak to dělat snadno a bez frameworkového molochu, proto
> >> to zde uvádím. Takových podobných nástrojů jako Werkzeug je více.
>
> >> Vůbec pro PHP programátora bude asi největší problém to, že dělat něco v
> >> Pythonu nebo Ruby neznamená jen naučit se jazyk a třeba jen jeden způsob
> >> jak to zprovoznit, ale už při čtení prvního tutorialu se na tebe valí věci
> >> jako ORM, MVC, URL routing, testování, ideálně ještě základy
> >> Linuxu/BSD/.... Tím se nenech odradit.
>
> >> Takže přeji hodně štěstí, ale stojí to za to :)
>
> >> PM
>
> >> PS. předpokládám, že tvůj další dotaz do této konference bude, kde na to
> >> najít hosting :)
>
> >> On 24.4.2010, at 16:01, Thomix wrote:
>
> >> > Zdravím,
>
> >> > už několik let programuju v php. Poslední dobou šilhám po python pro
> >> > web. Nainstaloval jsem si modul WSGI a zkusil si par tutoriálů. Ovšem
> >> > mám problém.
>
> >> > Např.:
>
> >> > def application(environ, start_response):
> >> >    status = '200 OK'
> >> >    output = 'hl'
>
> >> >    response_headers = [('Content-type', 'text/plain'),
> >> >                        ('Content-Length', str(len(output)))]
> >> >    start_response(status, response_headers)
>
> >> >    return [output]
>
> >> > Tomuto celkem rozumím ale nechapu jak v tom více programovat ??? Když
> >> > si napíšu print("neco"); napiše to chybu a dále se to semnou nebaví.
>
> >> > Viz.:
>
> >> > def application(environ, start_response):
> >> >    status = '200 OK'
> >> >    output = 'hl'
> >> >    print("neco");
>
> >> >    response_headers = [('Content-type', 'text/plain'),
> >> >                        ('Content-Length', str(len(output)))]
> >> >    start_response(status, response_headers)
>
> >> >    return [output]
>
> >> > Nějak nechápu v čem je problém. Mod_python nechci používat z důvodu
> >> > slabé odezvialesponň dle statistik co jsem četl na internetu. Mohl by
> >> > mě prosím někdo objasnit alespoň základ psaní ve WSGI ?
>
> >> > Děkuji :)
> >> > _______________________________________________
> >> > Python mailing list
> >> > Pyt... na py.cz
> >> >http://www.py.cz/mailman/listinfo/python
>
> > Na začátek bych strašně rád poděkoval za nádherné odezvy, které mě
> > přivádějí na tu dle mého správnou cestu. Moje projekty navštěvuje více
> > než deset lidí. Celový traffik je 4TB měsičné, beží na VPS (ubuntu a
> > debian). Zpracovávám databáze o velikosti 100 a více mb. Příjde mě že
> > PHP je v tomto při velké návštevnosti strašně pomalé. Proto by mě
> > zajímalo zda není chyba používat python frameworky na velké projekty.
> > Pokud ne v čem by jste mě doporučili je dělat ? Rád bych si právě
> > udělal i vlastní administraci a nechtěl bych využívat něco co už je.
> > Ještě jednou děkuji :)
> > _______________________________________________
> > Python mailing list
> > Pyt... na py.cz
> >http://www.py.cz/mailman/listinfo/python

Tady nejde ani tak o moje projekty, byla to pouze ukazka ze bych se
rad zbavil PHP a zacal v necem co ma budoucnost. Problem nastava v tom
ze pracuju jako programator PHP. V praci si muzu diktovat v cem bude
redakcni system naprogramovany, proto bych rad presel na python. Proto
nemam v lasce moc frameworky s jednotnou administraci. Sice si muzu
vybrat v cem to budu programovat ale kolega si diktuje jak bude
administrace vypadat. Doufal jsem ze Python si nejak sikovne poradi s
vecma jako php viz. $_GET[] nebo $_POST[]. Proto se treba divim proc
nefunguje print(""); pro web ale pres konzoli ho rozjedu. Existuje
neco co by usnadnovalo praci s vecma jako je GET atd a pritom bych v
tom mohl delat i vlastni administraci a sablonovaci system ?



Další informace o konferenci Python