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
[python] Stopky
Zdravím, potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus. Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to spraviť tak že by stále čakal na ten vstup ale zároveň by aj kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa vypol. Ďakujem za každú radu. ___ 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] Stopky
potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus. Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to spraviť tak že by stále čakal na ten vstup ale zároveň by aj kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa vypol. Ahoj, tady hodne zalezi na platforme, ale zkus se podivat na moduly signal (funguje hlavne na UNIXu) a event (ten se obvykle musi doinstalovat) - oba maji funkci timeout() ktera by te mohla zajimat :) Pokud je nebudes moci pouzit (hlavne ten event je trochu slozitejsi na nauceni), tak budes muset upravit to cekani na vstup od uzivatele a udelat si vlastni smycku s kontrolou casu. 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 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] Stopky
Co modul time?? Tam sou takový věci ne, jakože hodinky.. Akorát se na ty hodinky bude muset ten python furt koukat. Je. -Original Message- From: python-boun...@py.cz [mailto:python-boun...@py.cz] On Behalf Of remixus79 Sent: Friday, October 22, 2010 1:37 PM To: python@py.cz Subject: [python] Stopky Zdravím, potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus. Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to spraviť tak že by stále čakal na ten vstup ale zároveň by aj kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa vypol. Ďakujem za každú radu. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python __ Informace od ESET NOD32 Antivirus, verze databaze 5554 (20101022) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __ Informace od ESET NOD32 Antivirus, verze databaze 5554 (20101022) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz ___ 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] Stopky
Sory všem za tapetování http://ubuntuforums.org/showthread.php?t=715907 import time print This time.sleep(6) print and that. Akorát je třeba vykoumat, jak udělat, aby se z toho spánku probudil, když přijde vstup. Na takový věci sou ty vlákna, ne?? Ale tomu já nerozumim. Je. __ Informace od ESET NOD32 Antivirus, verze databaze 5554 (20101022) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz ___ 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] Stopky
Ahoj, pokud chceš čekání na vstup omezit nějakým časovým intervalem, máš několik možností: 1) nastavit si alarm(), operační systém (funguje to na unixech) ti po uplynutí zadané doby pošle SIGALRM, který nějak patřičně ošetříš, 2) spustit další vlákno, to na danou dobu uspat (time.sleep()), které po probuzení případně přeruší to první vlákno; toto by bylo nejlepší řešení, protože by fungovalo i ve Windows - Python ovšem pokud vím (a co jsem byl schopen dohledat) neumožňuje přerušit vlákno a možná ani přerušit syscall, na kterém dané vlákno zrovna stojí (dá se to trochu obejít pomocí signal handlerů nebo hacků přes ctypes a C API, to už je ale lepší řešení 1)), 3) použít neblokující čtení; to bys pak volal stále dokola, dokud by neuplynulo těch 5 minut (to není moc dobré, ale asi nejjednodušší na implementaci; opět zřejmě jen pro unix), 4) použít něco jiného, nejspíš dost exotického, třeba pokud tvůj operační systém přímo nabízí nějaké asynchronní I/O, 4.5) ve Windows: msvcrt (http://docs.python.org/library/msvcrt.html#console-i-o), ale nejelegantnější bude 5) použít select nebo pollování (poll, epoll atd.), v tomto případě bohatě stačí select. Je to funkce, které dáš jako parametry file deskriptory (případně v Pythonu file objekty) a volitelným parametrem je čas, po který bude select čekat. Funkce se přeruší v případě, že uplyne daný timeout, nebo že se na daném vstupu objeví nějaká data. Je to široce používaná technika - od právě čekání na vstup od uživatele až po výkonné síťové servery. Je tu akorát problém s Windows a OpenVMS, kde select funguje jen na socketech. Možná ale půjde vygooglit, jak to obejít, případně pro Windows použít výše zmíněné msvcrt. Viz tedy pydoc select a také man select_tut. Zkusím uvést nějaký ukázkový kód: #!/usr/bin/env python import fcntl import os import select import sys timeout = 300 # 5 minut # make stdin a non-blocking file fl = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL) fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK) while True: (rlist, wlist, xlist) = select.select([sys.stdin], [], [], timeout) print rlist if rlist: print Bylo zadano: %r % sys.stdin.read() else: print Cas vyprsel break Snad jsem odpověděl, na co jsi se ptal. Petr Messner 2010/10/22 remixus79 remixu...@gmail.com: Zdravím, potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus. Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to spraviť tak že by stále čakal na ten vstup ale zároveň by aj kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa vypol. Ďakujem za každú radu. ___ 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] Stopky
Predpokladam ze tvuj problem neni ten cyklus, ale jak to udelat aby cekani na vstup neblokovalo donekonecna. Zpusobu je vic, co me tak z hlavy napada jako relativne nejjednodussi je nechat si za pet minut dorucit signal z casovace, viz modul signal. Python instaluje implicitni handler ktery vystreli vyjimku KeyboardInterrupt, takze na ukonceni programu nepotrebujes vlastne nic nez zavolat signal.setitimer() a pak si tu vyjimku odchytit. Behem prace casovac vypnes nastavenim na 0. Nebere to v uvahu zastaveni pomoci ^S ale to te predpokladam netrapi. Pokud (az :-) budes chtit neco slozitejsiho, budes potrebovat si prepnout stdin do neblokujiciho modu (O_ASYNC) pomoci modulu fcntl. Pak si budes ale muset sam resit blokovani (neblokujici nekonecna smycka neni dobry napad) a obecne to neni trivialni zalezitost. Hotove neblokujici cteni je nekde v modulu curses. Nevim jestli jde nejak rozumne pouzit bez zbytku curses (initscr() prakticky obrati terminal naruby coz nemam rad), ale jestli chces hybat kurzorem, barvicky apod. tak je curses asi nejlepsi zpusob. Jestli jsi na wydlich tak jsou urcite i jine zpusoby (conio?) ale to tom nic nevim. remixus79 (Friday 22 October 2010 13:37:06): Zdravím, potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus. Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to spraviť tak že by stále čakal na ten vstup ale zároveň by aj kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa vypol. Ďakujem za každú radu. ___ 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
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
Re: [python] Stopky
Zatiaľ ďakujem za rady ale asi som sa vyjadril zle. Potrebujem program ktory bude cakat na vstup od uzivatela ale zaroven bude aj kontrolovat ci ten vstup zadava. Ak povedzme nezada po 5minútach tak sa spustí ďalšie vlákno s inou funkciou. cez Modul time to nejde pretoze kym nezadam vstup tak sa while neposunie ďalej - to je ten môj problém. Takže sa tu písalo o funkcii signal() tak ak by niekto mohol mi napisať nejaký vzorovy kod bol by som mu vdacny. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python