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

Jirka Vejrazka jirka.vejrazka na gmail.com
Neděle Duben 25 09:48:42 CEST 2010


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 <thomixcz at gmail.com> wrote:
> On Apr 24, 5:34 pm, Petr Messner <petr.mess... at 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/a rozklikni 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... at 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
> Python at py.cz
> http://www.py.cz/mailman/listinfo/python
>


Další informace o konferenci Python