Re: [python] Proces vs. vlakno
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@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
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@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Ahoj, no, podle me( to pr(ímo v Pythonu být nemu*z(e. Python se chová tak, jak je napsaný kód :-D Python pr(eci sám nerozhoduje, jestli aplikace pojede procesove( nebo vláknove(. Takz(e pokud se to jinak chová na 32-bit a 64-bit, pr(ípadne( se to jinak chová s jedním jádrem a jinak s 4 jádry, atd., tak bych zac(al hledat uvnitr( aplikace, pr(ípadne( v ne(jakém pouz(itém modulu, jak jsi psal. Tomás( Dne 22.10.2010 0:51, Tomas Hnizdil napsal(a): Ano, snazim se zjistit, proc se to chova na ruznych platformach ruzne a proc to nekde tvori procesy a nekde vlakna - ten problem je, ze stezejni kod by mel byt na platforme nezavisly, coz me vede k myslence, ze by pes mohl byt zakopany v pythonu, ale kdo vi ... diky za nasmerovani, pokusim se hledat timto smerem. Ahoj, ja jsem mozna takhle vecer trochu unaveny, ale nejsem schopen poznat na co se vlastne ptas, krome toho ze tam je mozna ruzne chovani pythonu. Nevim, jestli ten fakt se na 32-bitovych platformach se pouzivaji procesy a na 64-bitovych vlakna je zamer nebo ten problem, i ktereho se snazis zjistit pricinu. Pokut to to to druhe a mas k tomu zdrojaky, tak by to nemel byt zasadni problem, proste je prohledej a hledej slova threading a processing, velmi pravdepodobne narazis na nejaky kus kodu, ktery se chova na ruznych platformach ruzne. Tak me napada, ze by stalo za to hledat import platform nebo from platform import architecture. Snad to aspon trochu pomuze. Jinak se to da samozrejme vystopovat pomoci debuggeru na urovni OS, ale to uz je trochu slozitejsi :) Jirka ___ Python mailing list Python@py.cz mailto:Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Zacinam si myslet, ze to bude schovane nekde na urovni OS pripadne HW, zjistil jsem totiz, ze na mem 32b stroji se to chova jako na tech 64bitech ... tak a ted babo rad :) Nejspis to bude schovane nekde pod podporou HW/OS neceho, co se jmenuje copy-on-write (zkopiruj procesu data az ve chvili, kdy do nich bude chtit psat), coz prave pamet znacne usetri ... zajimave je, ze se ale i tak server ukazuje jako jediny proces (ale treba s dvojnasobnou alokaci pameti, coz je porad lepsi nez Nkrat polovicni mnozstvi pameti, kde N pujde treba do tisicu), coz jsem si myslel ukazuje prave na pouziti vlaken ... jak pises, python tohle nema proc ovlivnovat, mel by delat co chce uzivatel. (no doufam, ze jsem to nenapsal uplne zmatecne) OT - Nevidel jste nekdo nejaky zajimavy clanek, ktery by se venoval prave sprave procesu v modernich OS/prip. s podporou HW/, kde by toto bylo trochu lepe vysvetlene? Diky 2010/10/22 Tomas Brabenec konfere...@brabenec.net Ahoj, no, podle mě to přímo v Pythonu být nemůže. Python se chová tak, jak je napsaný kód :-D Python přeci sám nerozhoduje, jestli aplikace pojede procesově nebo vláknově. Takže pokud se to jinak chová na 32-bit a 64-bit, případně se to jinak chová s jedním jádrem a jinak s 4 jádry, atd., tak bych začal hledat uvnitř aplikace, případně v nějakém použitém modulu, jak jsi psal. Tomáš Dne 22.10.2010 0:51, Tomas Hnizdil napsal(a): Ano, snazim se zjistit, proc se to chova na ruznych platformach ruzne a proc to nekde tvori procesy a nekde vlakna - ten problem je, ze stezejni kod by mel byt na platforme nezavisly, coz me vede k myslence, ze by pes mohl byt zakopany v pythonu, ale kdo vi ... diky za nasmerovani, pokusim se hledat timto smerem. Ahoj, ja jsem mozna takhle vecer trochu unaveny, ale nejsem schopen poznat na co se vlastne ptas, krome toho ze tam je mozna ruzne chovani pythonu. Nevim, jestli ten fakt se na 32-bitovych platformach se pouzivaji procesy a na 64-bitovych vlakna je zamer nebo ten problem, i ktereho se snazis zjistit pricinu. Pokut to to to druhe a mas k tomu zdrojaky, tak by to nemel byt zasadni problem, proste je prohledej a hledej slova threading a processing, velmi pravdepodobne narazis na nejaky kus kodu, ktery se chova na ruznych platformach ruzne. Tak me napada, ze by stalo za to hledat import platform nebo from platform import architecture. Snad to aspon trochu pomuze. Jinak se to da samozrejme vystopovat pomoci debuggeru na urovni OS, ale to uz je trochu slozitejsi :) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing listpyt...@py.czhttp://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Zacinam si myslet, ze to bude schovane nekde na urovni OS pripadne HW, zjistil jsem totiz, ze na mem 32b stroji se to chova jako na tech 64bitech ... tak a ted babo rad :) Nejspis to bude schovane nekde pod podporou HW/OS neceho, co se jmenuje copy-on-write (zkopiruj procesu data az ve chvili, kdy do nich bude chtit psat), coz prave pamet znacne usetri ... zajimave je, ze se ale i tak server ukazuje jako jediny proces (ale treba s dvojnasobnou alokaci pameti, coz je porad lepsi nez Nkrat polovicni mnozstvi pameti, kde N pujde treba do tisicu), coz jsem si myslel ukazuje prave na pouziti vlaken ... jak pises, python tohle nema proc ovlivnovat, mel by delat co chce uzivatel. To nedava zadny velky smysl, OS se nemuze rozhodnout jestli pouzije proces nebo thread, protoze jsou tam programatorsky uplne jine pristupy k datum, zamkum a tak. Tohle musi byt reseno na urovni aplikace. Copy-on-write to nijak neovlivni, to je zalezitost alokace pameti a jeji uspory kde to jde, ale to nijak nesouvisi s internim fungovanim programu. Mas k tomu programu v pythonu zdrojaky? Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Zacinam si myslet, ze to bude schovane nekde na urovni OS pripadne HW, zjistil jsem totiz, ze na mem 32b stroji se to chova jako na tech 64bitech ... tak a ted babo rad :) Nejspis to bude schovane nekde pod podporou HW/OS neceho, co se jmenuje copy-on-write (zkopiruj procesu data az ve chvili, kdy Dvě otázky: * Co je to za OS? * Nebude to celé nějak jinak? Trochu mě překvapuje, že ses rozhodl nehledat problém v knihovně omniORB, ktera slouzi ke komunikaci klientu se serverem. První co mě napadlo bylo: SocketServer, ForkingTCPServer, ThreadingTCPServer, ale taky můžu být úplně mimo :-) -- Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
To není podle mě možné. Ale jak jsem psal, může být rozdíl nejen 32/64, ale třeba podle počtu procesorů/jader. Např. pokud aplikace zjistí, že máte např. 4 a více jader, funguje procesově, pokud máte jen jedno jádro, tak vláknově. Musí to ale být někde v aplikaci/modulu. OS se podle mě nemůže sám rozhodnout, jak bude aplikace fungovat. Taky jsme problém s procesy/vlákny v Pythonu řešili a věřte, že systém za Vás nic sám v tomhle směru neudělá. Vše řeší aplikační logika, případně aplikační logika spolu s OS, ale nikdy ne OS sám. T. Dne 22.10.2010 14:29, Tomas Hnizdil napsal(a): Zacinam si myslet, ze to bude schovane nekde na urovni OS pripadne HW, zjistil jsem totiz, ze na mem 32b stroji se to chova jako na tech 64bitech ... tak a ted babo rad :) Nejspis to bude schovane nekde pod podporou HW/OS neceho, co se jmenuje copy-on-write (zkopiruj procesu data az ve chvili, kdy do nich bude chtit psat), coz prave pamet znacne usetri ... zajimave je, ze se ale i tak server ukazuje jako jediny proces (ale treba s dvojnasobnou alokaci pameti, coz je porad lepsi nez Nkrat polovicni mnozstvi pameti, kde N pujde treba do tisicu), coz jsem si myslel ukazuje prave na pouziti vlaken ... jak pises, python tohle nema proc ovlivnovat, mel by delat co chce uzivatel. (no doufam, ze jsem to nenapsal uplne zmatecne) OT - Nevidel jste nekdo nejaky zajimavy clanek, ktery by se venoval prave sprave procesu v modernich OS/prip. s podporou HW/, kde by toto bylo trochu lepe vysvetlene? Diky 2010/10/22 Tomas Brabenec konfere...@brabenec.net mailto:konfere...@brabenec.net Ahoj, no, podle mě to přímo v Pythonu být nemůže. Python se chová tak, jak je napsaný kód :-D Python přeci sám nerozhoduje, jestli aplikace pojede procesově nebo vláknově. Takže pokud se to jinak chová na 32-bit a 64-bit, případně se to jinak chová s jedním jádrem a jinak s 4 jádry, atd., tak bych začal hledat uvnitř aplikace, případně v nějakém použitém modulu, jak jsi psal. Tomáš Dne 22.10.2010 0:51, Tomas Hnizdil napsal(a): Ano, snazim se zjistit, proc se to chova na ruznych platformach ruzne a proc to nekde tvori procesy a nekde vlakna - ten problem je, ze stezejni kod by mel byt na platforme nezavisly, coz me vede k myslence, ze by pes mohl byt zakopany v pythonu, ale kdo vi ... diky za nasmerovani, pokusim se hledat timto smerem. Ahoj, ja jsem mozna takhle vecer trochu unaveny, ale nejsem schopen poznat na co se vlastne ptas, krome toho ze tam je mozna ruzne chovani pythonu. Nevim, jestli ten fakt se na 32-bitovych platformach se pouzivaji procesy a na 64-bitovych vlakna je zamer nebo ten problem, i ktereho se snazis zjistit pricinu. Pokut to to to druhe a mas k tomu zdrojaky, tak by to nemel byt zasadni problem, proste je prohledej a hledej slova threading a processing, velmi pravdepodobne narazis na nejaky kus kodu, ktery se chova na ruznych platformach ruzne. Tak me napada, ze by stalo za to hledat import platform nebo from platform import architecture. Snad to aspon trochu pomuze. Jinak se to da samozrejme vystopovat pomoci debuggeru na urovni OS, ale to uz je trochu slozitejsi :) Jirka ___ Python mailing list Python@py.cz mailto:Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz mailto:Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz mailto:Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Zdrojaky mam. Nic s architekturama/platformama jsem tam nenasel, jeste se tedy zkusim kouknout na ten omniORB ... Jinak s temi jadry je to dobry napad, ale je to presne opacne :) (na 4jadru to dela N+K procesu, kde N je pocet klientu, K je konstantni, na 8 a 16i jadru to vytvori jen jeden proces, ktery ma vice alokovane pameti) 2010/10/22 Tomas Brabenec konfere...@brabenec.net To není podle mě možné. Ale jak jsem psal, může být rozdíl nejen 32/64, ale třeba podle počtu procesorů/jader. Např. pokud aplikace zjistí, že máte např. 4 a více jader, funguje procesově, pokud máte jen jedno jádro, tak vláknově. Musí to ale být někde v aplikaci/modulu. OS se podle mě nemůže sám rozhodnout, jak bude aplikace fungovat. Taky jsme problém s procesy/vlákny v Pythonu řešili a věřte, že systém za Vás nic sám v tomhle směru neudělá. Vše řeší aplikační logika, případně aplikační logika spolu s OS, ale nikdy ne OS sám. T. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Hloupa otazka - neni to chyba mereni? Vetsina nastroju ohlasi prosty soucet velikosti vsech stranek pameti procesu a stranky sdilene pomoci copy-on-write nebere v uvahu. Vlakna se uctuji svemu materskemu procesu spolecne, takze ukazuji jinak. V kazdem pripade by pomohlo vedet o jaky system jde. Tomas Hnizdil (Thursday 21 October 2010 23:25:05): Hezky vecer, spis ciste ze zvedavosti - nesetkali jste se nekdo s ruznym chovanim pythonu (2.4.4) na ruznych architekturach (32 vs 64bit) co se tyce podprocesu a vlaken? Mame aplikaci typu klient-server, ktera si pro kazdeho klienta na 32bit vyvari novy proces (ktery si zabere par desitek MB pameti), oproti tomu na 64bit platformach vytvari pouze nova vlakna, takze je to z hlediska spotreby pameti o neco veselejsi (a mym ukolem je, aby to bylo vesele i na platformach s kratsima adresama :)). Jediny rozdil v softwaru ktery to podle platforem je, je v pythonu (:)) a knihovne omniORB, ktera slouzi ke komunikaci klientu se serverem, kde bych asi problem nehledal. Problem je ale, ze netusim takhle od boku ani kde bych hledat zacit mel. Diky za napady Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Proces vs. vlakno
Hezky vecer, spis ciste ze zvedavosti - nesetkali jste se nekdo s ruznym chovanim pythonu (2.4.4) na ruznych architekturach (32 vs 64bit) co se tyce podprocesu a vlaken? Mame aplikaci typu klient-server, ktera si pro kazdeho klienta na 32bit vyvari novy proces (ktery si zabere par desitek MB pameti), oproti tomu na 64bit platformach vytvari pouze nova vlakna, takze je to z hlediska spotreby pameti o neco veselejsi (a mym ukolem je, aby to bylo vesele i na platformach s kratsima adresama :)). Jediny rozdil v softwaru ktery to podle platforem je, je v pythonu (:)) a knihovne omniORB, ktera slouzi ke komunikaci klientu se serverem, kde bych asi problem nehledal. Problem je ale, ze netusim takhle od boku ani kde bych hledat zacit mel. Diky za napady Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
spis ciste ze zvedavosti - nesetkali jste se nekdo s ruznym chovanim pythonu (2.4.4) na ruznych architekturach (32 vs 64bit) co se tyce podprocesu a vlaken? Mame aplikaci typu klient-server, ktera si pro kazdeho klienta na 32bit vyvari novy proces (ktery si zabere par desitek MB pameti), oproti tomu na 64bit platformach vytvari pouze nova vlakna, takze je to z hlediska spotreby pameti o neco veselejsi (a mym ukolem je, aby to bylo vesele i na platformach s kratsima adresama :)). Jediny rozdil v softwaru ktery to podle platforem je, je v pythonu (:)) a knihovne omniORB, ktera slouzi ke komunikaci klientu se serverem, kde bych asi problem nehledal. Problem je ale, ze netusim takhle od boku ani kde bych hledat zacit mel. Ahoj, ja jsem mozna takhle vecer trochu unaveny, ale nejsem schopen poznat na co se vlastne ptas, krome toho ze tam je mozna ruzne chovani pythonu. Nevim, jestli ten fakt se na 32-bitovych platformach se pouzivaji procesy a na 64-bitovych vlakna je zamer nebo ten problem, i ktereho se snazis zjistit pricinu. Pokut to to to druhe a mas k tomu zdrojaky, tak by to nemel byt zasadni problem, proste je prohledej a hledej slova threading a processing, velmi pravdepodobne narazis na nejaky kus kodu, ktery se chova na ruznych platformach ruzne. Tak me napada, ze by stalo za to hledat import platform nebo from platform import architecture. Snad to aspon trochu pomuze. Jinak se to da samozrejme vystopovat pomoci debuggeru na urovni OS, ale to uz je trochu slozitejsi :) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Proces vs. vlakno
Ano, snazim se zjistit, proc se to chova na ruznych platformach ruzne a proc to nekde tvori procesy a nekde vlakna - ten problem je, ze stezejni kod by mel byt na platforme nezavisly, coz me vede k myslence, ze by pes mohl byt zakopany v pythonu, ale kdo vi ... diky za nasmerovani, pokusim se hledat timto smerem. Ahoj, ja jsem mozna takhle vecer trochu unaveny, ale nejsem schopen poznat na co se vlastne ptas, krome toho ze tam je mozna ruzne chovani pythonu. Nevim, jestli ten fakt se na 32-bitovych platformach se pouzivaji procesy a na 64-bitovych vlakna je zamer nebo ten problem, i ktereho se snazis zjistit pricinu. Pokut to to to druhe a mas k tomu zdrojaky, tak by to nemel byt zasadni problem, proste je prohledej a hledej slova threading a processing, velmi pravdepodobne narazis na nejaky kus kodu, ktery se chova na ruznych platformach ruzne. Tak me napada, ze by stalo za to hledat import platform nebo from platform import architecture. Snad to aspon trochu pomuze. Jinak se to da samozrejme vystopovat pomoci debuggeru na urovni OS, ale to uz je trochu slozitejsi :) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python