[python] vlakna,cpu

2010-11-18 Tema obsahu vepro

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

2010-11-18 Tema obsahu Tomas Brabenec

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

2010-11-18 Tema obsahu Jirka Vejrazka
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

2010-11-18 Tema obsahu Hynek Fabian
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

2010-11-18 Tema obsahu Petr Messner
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

2010-11-18 Tema obsahu vepro

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