[python] Proces vs. vlakno

Petr Messner petr.messner na gmail.com
Středa Listopad 3 22:43:11 CET 2010


Ahoj,

na jakém operačním systému a jaké verzi to zkoušíš? Třeba Linux nevytváří vlákna, ale procesy. Vlákna jsou jen procesy, které spolu sdílí nějaké prostředky (paměť, otevřené soubory apod.). Viz clone(2). V Linuxu prostě každé "vlákno" má svoje PID, několik vláken má shodné TGID (thread group identifier), je to dobře vidět v /proc/*/stat. Protože POSIX se na vlákna dívá trochu jinak, funkce getpid() ve skutečnosti vrací TGID :)

Takže pokud jsi na Linuxu, ani není divu, že místo vláken vidíš procesy. Záleží na nástroji, kterým se na ty vlákna/procesy díváš, jak ti to podá. Možná bude problém tady. Python si totiž nevymýšlí vlastní věci, většina toho, co dělá, je akorát volání různých funkcí v libc apod., takže pokud je pozorována nějaká domnělá anomálie, spíš než v Pythonu bude mít původ někde ještě níže. Může i záležet na konkrétní verzi Linuxového kernelu nebo možná i libc.

Pokud se chceš nějak pohnout z místa, dodej víc informací. Především na čem jedeš (distribuce, její verze, verze kernelu), jak jsi vůbec zjistil, že máš vlákna nebo procesy, a případně nějaký ukázkový kód, ať je jisté, že do toho nezasahuje nějaká knihovna třetí strany (původně tato diskuze o něčem takovém byla, jestli se nepletu). A samozřejmě, jaký problém ti to způsobuje, který potřebuješ vyřešit :) Co jsem tak narychlo zkoušel threading.Thread na Debianu Lenny (x86 i x64), fungovalo to normálně (tzn. příkaz ps se tvářil, že je jeden proces se dvěma thready).

Jinak modul thread je opravdu built-in, takže žádné thread.by skutečně není.


PM


On 3.11.2010, at 18:36, Tomas Hnizdil wrote:

> Jsem trochu dale, zatim jsem dosel k tomu, ze za vytvareni procesu muze patricne pojmenovana knihovna "threading" :)
> jeji verze pro 32/64 se nelisi, nicmene na amd64 strojich vytvori vlakna (zustava jeden proces) a na i386 procesy (procesu je tedy vice). Tu rozdilnou logiku bych tedy videl na knihovne thread, kterou si threading importuje a vola z ni start_new_thread ...
> 
> Kazdopadne neco jako thread.py najit nemuzu, tohle nejspis nebude pythonovska zalezitost, nebo se pletu?
> 
> v threading je i metoda _test(), zkousel jsem ji volat jak z pythonu 2.4.4, 2.5 a 2.6.2 ve vsech nam to tvori procesy ... nesetkal se nekdo s necim podobnym? kde najit onen thread?
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python



Další informace o konferenci Python