[python] vlakna,cpu
Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] vlakna,cpu
Ano, presne tak, Python standardne vyuziva pouze jedno jadro. Kazdopadne, Python uz, tusim od 2.6, umi v zakladu s vice jadry pracovat: http://docs.python.org/dev/library/multiprocessing.html T. Dne 18.11.2010 16:31, vepro napsal(a): Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ 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] vlakna,cpu
Nijak :( Pythin pouziva GIL, neboli Global Interpreter Lock. Kvuli komplikacim se zamykanim vnitrnich struktur Pythonu je to udelane tak, ze se vlakna stridaji a nebezi paralelne. Je to znamy problem Pythonu, ale nikdo ho zatim nevyresil. Zkus se mrknout na modul processing, ktery misto vlaken pouziva procesy ale jinak je jeho pouziti skoro stejne jako u threadingu, samozrejme pak neni (jednoduchy) pristup ke sdilenym datum. Tusim, ze modul procesisng do jiste miry obchazi GIL, ale ted s nejsem na 100% jisty a nemam pristup k PC, tak si to radsi dohledej. Jirka On 18/11/2010, vepro p.zla...@gmail.com wrote: Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ 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] vlakna,cpu
Interpret pythonu upouziva jeden globalni zamek pro pristup ke vsem promennym. AFAIK vlakna ma v pythonu smysl pouzivat jedine pro kod z externich knihoven nebo pri (ne)cekani na blokujici operace. Na vytizeni vice jader samotnym pythonem je potreba odforkovat cele instance interpretru. vepro (Thursday 18 November 2010 16:31:03): Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ 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] vlakna,cpu
Ahoj, může za to věc zvaná Global Interpreter Lock (GIL). V dynamickém jazyce jako je Python je totiž trochu problém korektně pracovat ve více vláknech, proto to autoři Pythonu vyřešili tímto zámkem (mutexem) - v jednom okamžiku běží Pythonový kód pouze v jednom vlákně. Přesto program může být vícevláknový a má to smysl třeba při práci se sítí, databázemi - GIL je v patřičných okamžicích uvolňován a je požadován až při předávání dat zpět do Pythonu. Lze to obejít spuštěním programu ve více procesech. Pokud je potřeba, aby procesy mezi sebou komunikovaly, lze to řešit, i když to není tak jednoduché jako řešit to mezi vlákny. Viz modul multiprocessing, zmiňovaný ostatními. Třeba u webového nebo aplikačního serveru nemusí být důležité, aby mezi sebou jednotlivé procesy vůbec komunikovaly, pak je řešení triviální (spustit více procesů). Petr Messner 2010/11/18 vepro p.zla...@gmail.com: Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ 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] vlakna,cpu
Dekuji vsem za radu. Zkusim se kouknout na ten processing. Petr On 11/18/2010 05:06 PM, Petr Messner wrote: Ahoj, může za to věc zvaná Global Interpreter Lock (GIL). V dynamickém jazyce jako je Python je totiž trochu problém korektně pracovat ve více vláknech, proto to autoři Pythonu vyřešili tímto zámkem (mutexem) - v jednom okamžiku běží Pythonový kód pouze v jednom vlákně. Přesto program může být vícevláknový a má to smysl třeba při práci se sítí, databázemi - GIL je v patřičných okamžicích uvolňován a je požadován až při předávání dat zpět do Pythonu. Lze to obejít spuštěním programu ve více procesech. Pokud je potřeba, aby procesy mezi sebou komunikovaly, lze to řešit, i když to není tak jednoduché jako řešit to mezi vlákny. Viz modul multiprocessing, zmiňovaný ostatními. Třeba u webového nebo aplikačního serveru nemusí být důležité, aby mezi sebou jednotlivé procesy vůbec komunikovaly, pak je řešení triviální (spustit více procesů). Petr Messner 2010/11/18 veprop.zla...@gmail.com: Pratele, Napsal jsem si aplikaci, ktera vyuziva vlakna v pythonu (modul threading). Muzu libovolne volit od jednoho vlakna az po X vlaken. Co se deje je, ze pokud spustim kod pouze na jednom vlakne je uloha dokoncena o dost rychleji, nez pokud ji pustim na vice vlaknech. Tusim, ze nejaky cas zabere rezie ,ale v tomto bych to nehledal. Procedury v jednotlivych vlaknech jsou temer nezavisle (pouze jeden zamek u sdilene promenne). Co je mi divne a myslim, ze v tom je zakopan pes, ze vyuziti procesoru je zhruba stejne (100%) pro ulohu bezici v jednom, tak i ve vice vlaknech. Vypada to tak, ze vice vlaken vyuziva pouze jedno jadro procesoru (onech 100%), tak jako jednovlaknovy proces. Je tedy nutne nejak pythonu rici, ze ma vyuzivat vice jader pro vlakna? Dekuji za pripadnou radu Petr ___ 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 mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python