[python] select vs threads
Zdenek Pavlas
pavlas na nextra.cz
Pondělí Květen 10 10:50:14 CEST 2004
Radim Kolar wrote:
> Zajimalo by mne jak nejlepe / t.j. s nejmensi namahou/ nabastlit jeho serverovou
> cast. Zda je lepsi pouzit thready per client nebo select(). Pokud jde o
> efektivitu kodu select bude asi rychlejsi, protoze kernel nebude muset delat
> zbytecne context switche.
Mam dobre zkusenosti s pouzivanim threadoveho modelu.
Rezie na switchovani threadu je zcela minimalni, na Linuxu
zadne problemy. Vede to na maly, prehledny,
dobre udrzovatelny kod.
Je akorat dobre pro provozni nasazeni kazdy dulezitejsi
thread (minimalne kazdou accept() smycku) obalit jednim
try: except:, vyjimky logovat, a smycku restartovat.
Problemy jsou spis v tomto:
- udelat spravne zamykani muze byt problem, Python navic
umi jen exklusivni locky, vsechno ostatni je nad tim
dost nesikovne a pomalu emulovano (Rlock, Condition).
Je zahodno .release () davat pokudmozno do finally: :)
- signaly jsou vsude mimo Linux velky problem. Moc tomu
nerozumim, ale POSIXove thready jsou navrzeny nejak
idiotsky, takze vetsina implementaci potrebuje pri prvnim
vytvorenem threadu spustit jeste jeden "servisni" thread,
a v OSech kde vsechny thready maji stejny PID je nemozne
urcit ktery thread signal obdrzi, a chovani toho servisniho
threadu nejde menit. Aplikace ktere na Linuxu nebo Solarisu
bezi OK mi padaji na FreeBSD po SIGHUP kvuli reloadu
konfigurace, a neprisel jsem na to jestli/jak
to vyresit. To ze threading +signaly = trouble je tusim
i nekde v dokumentaci Pythonu.
> Neni lepsi pouzit twisted framework?
Mi to prislo jako mamut, psany nejakym OO maniakem,
ktery na kdejakou blbost, kterou normalni clovek nekam
prilepi jako kus kodu, pise samostatnou tridu, na uplne
jinem miste vytvari instanci, a nekde zase uplne jinde
to poslepuje dohromady, v dusledku cehoz se v tom vubec
neda vyznat. Pouzit jsem to radeji ani nezkousel, ale
mozna ze jini maji jine zkusenosti.
--
Zdenek Pavlas
Další informace o konferenci Python