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

Petr Messner petr.messner na gmail.com
Neděle Duben 25 01:47:11 CEST 2010


2010/4/24 Thomix <thomixcz na gmail.com>:
...
>
> 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 :)

Čísla, která uvádíš, jsou několikařádově menší než třeba weby
Seznam.cz, které jsou implementovány v Pythonu. Nechci (a asi ani
nemůžu) popisovat, jaký framework je pro ně použit, ale nebude to
výkonově nic lepšího ani horšího než nějaký normálně navržený
Pythonový framework. Ať už již existující nebo co si sám člověk může
napsat.

Na druhou stranu třeba Facebook je celý v PHP. Myslím, že fakt, že
Facebook nedávno vydal (opensourcoval) překladač PHP do C++, a vůbec
existence různých PHP optimalizátorů a bytecode keší trochu naznačuje
jisté výkonové nedostatky PHP, ale ono PHP na tom není až tak špatně.
Naopak, pokud vím, je to jeden z nejrychlejších interpreterů. Bohužel
v rukávu zrovna nemůžu najít odkaz na nějaký důvěryhodný test.

Problém opět není v rychlosti toho či onoho, ale v tom, jak to celé
funguje - PHP skript i se všemi includovanými knihovnami se musí
načíst, zparsovat a zinicializovat při každém HTTP požadavku. Toto se
u dlouhoběžící Pythonové aplikace děje jen při spuštění, obsluha
každého jednotlivého HTTP požadavku je pak o tento rozdíl rychlejší.
(Pojmem dlouhoběžící myslím, že to nesmíš nakonfigurovat zrovna jako
CGI nebo nějak podobně, to pak o popsanou výhodu samozřejmě
přicházíš.)

Když už máš webovou aplikaci nataženou v paměti a ona tam zůstává
(tzn. není smazána na konci prvního požadavku, jako se to obvykle děje
v PHP), můžeš s tím dělat psí kusy. Můžeš si třeba přímo v paměti (v
nějakém objektu apod.) kešovat data, vygenerované stránky, výsledky z
databáze... Pokud použiješ šablonovací engine (jako že asi ano), bývá
obvyklé, že obsahuje nějaký loader, který také kešuje načtené šablony.
Můžeš si v nějakém poolu uchovávat i samotná databázová spojení (to v
PHP jde taky, říká se tomu persistentní spojení, ale někdy to bývá
vypnuté).

Abych začal odpovídat nějak konkrétně:

> Příjde mě že PHP je v tomto při velké návštevnosti strašně pomalé.

Viz výše :) Záleží na tom, co konkrétně ty PHP skripty dělají.

> Proto by mě zajímalo zda není chyba používat python frameworky na velké projekty.

Myslím, že není. Existují nástroje, jako ab (Apache benchmarking tool)
nebo httperf, které ti změří, kolik požadavků za sekundu web zvládne.
Nevygenerují takovou zátěž, jakou ti udělají uživatelé, ale pro
změření, zda je to či ono dostatečně rychlé, to je dobré. Konečně,
všechno stejně může hodně (pozitivně) ovlivnit kešování na
proxy/webserveru.

> Rád bych si právě udělal i vlastní administraci a nechtěl bych využívat něco co už je.

Dělej jak chceš. Já dělám také :) "Velké" frameworky na to mají
fíčury, jako je koncept controllerů, scaffolding, generování formulářů
(s validací, načítáním názvů sloupců z databáze a tak). Ale zase to
dělají dost obecně a hlavně tak, aby to každý mohl použít. Když to
uděláš podle sebe, může to mít pro tebe lepší výsledky. Podle mě je
důležité se v tom vyznat, vědět jak to funguje jinde, abys při
vynalézání vlastního kola nevynalezl něco hranatého :) Jinak, pokud
zrovna otázku "framework ano nebo ne" nemusíš řešit se spolupracovníky
na projektu, se zadavatelem nebo s firemními zvyklostmi, je to asi
jedno.

PM


Další informace o konferenci Python