[python] vlakna,cpu

Petr Messner petr.messner na gmail.com
Čtvrtek Listopad 18 17:06:20 CET 2010


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.zlamal na 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 na py.cz
> http://www.py.cz/mailman/listinfo/python
>


Další informace o konferenci Python