Python: Porovnání verzí

Smazaný obsah Přidaný obsah
→‎Vlastnosti: +illustration
→‎Výkon: Aktualizace a doplnění informací související s výkonem programů psaných v jazyce Python.
Řádek 76:
 
== Výkon ==
Python patří mezi pomalejší jazyky. Výkon aplikací napsaných v Pythonu je dobrý, protože výkonově kritické knihovny jsou implementovány v jazyce [[C (programovací jazyk)|C]], s kterým Python výborně spolupracuje. INavíc samotnývýkon jazykpočítačů je natak tomvysoký, vže porovnáníu sběžných jinýmiaplikací interpretovanýmijsou jazykyrozdíly dobře.ve Jevýkonu napřjazyků nepatrné. 3V praxi 5se krátproto rychlejšíPython nežpoužívá [[PHP]]i 5na výrazně pomalých zařízeních.6.{{Fakt/dne|20170327140858|}} ProNapříklad Pythonse navícpoužívá existujejako snadnovýchozí použitelnáprogramovací knihovnaprostředí [[Psyco]],na kterájednodeskových [[transparentnostpočítačích (informatika)|transparentně]]Raspberry [[OptimalizacePi, (informatika)|optimalizuje]]které kódmají Pythonuněkolikanásobně nanižší výkon., Některénež operacelibovolné jsoudomácí pomocíPC, Psyco urychlenydesktop nebo řádově<refnotebook. name="gp4psyco">http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=python&lang2=psyco</ref>.
 
Na výkonově kritické programy se ale Python sám o sobě nehodí. Pro tyto účely vznikla během jeho historie řada optimalizačních technik.
 
V minulosti se pro zvýšení výkonu používala snadno použitelná knihovna [[Psyco]], která [[transparentnost (informatika)|transparentně]] [[Optimalizace (informatika)|optimalizovala]] kód Pythonu na výkon (JIT). Některé operace byly pomocí Psyco urychleny až řádově<ref name="gp4psyco">http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=python&lang2=psyco</ref>. Dnes je tato knihovna neudržovaná a hodí se jen pro 32 bitové prostředí a podporuje Python do verze 2.6.
 
V současné době tuto knihovnu nahradily projekty jako PyPy nebo Cython. PyPy je alternativní interpret jazyka Python, který je zaměřen na výkon a obsahuje vlastní implementaci JIT. Má i další vlastnosti, třeba stackless mód, který poskytuje výkonné mikro thready pro masivní paralelní programování.
 
Cython je kompilátor jazyka Python do binární podoby. Přesněji řečeno, Cython transformuje kód z jazyka Python do kódu jazyka C, který se pak běžnými nástroji přeloží do binární podoby. Jenom zkompilováním Python kódu do binární podoby vzroste výkon aplikace typicky dvojnásobně. Dále Cython rozšiřuje syntaxi Python jazyka. Například o statické typy nebo přímé volání funkcí z knihoven C. Tímto lze optimalizovat výkon programu až na úroveň výkonu programů napsaných přímo v jazyce C. Cython je kompatibilní se standardním interpretem Pythonu (CPython), což znamená, že Cythonem lze kompilovat knihovny pro Python. Lze tak s výhodou využít toho, že výkonově kritická je typicky jen malá část kódu, běžně jen pár funkcí. Tyto funkce lze vytáhnout do samostatného modulu, optimalizovat pro Cython a přeložit je Cythonem jako knihovnu pro Python. Programátorovi tak zůstane zachována flexibilita a pohodlí jazyka Python pro většinu kódu a současně s tím získá i vysoký výkon jazyka C. Na serveru root.cz je pěkná [https://www.root.cz/clanky/prakticke-pouziti-nastroje-cython-pri-prekladu-pythonu-do-nativniho-kodu-1/ ukázka postupné optimalizace Python kódu v Cythonu] pro získání maximálního výkonu s vysvětlením všech náležitostí. Já na ukázku uvedu začátek a konec optimalizace jednoduché funkce add_two_numbers().<syntaxhighlight lang="python3">
def add_two_numbers(x, y):
return x + y
 
z = add_two_numbers(123, 456)
print(z)
</syntaxhighlight><syntaxhighlight lang="cython">
from libc.stdio cimport printf
 
cdef int add_two_numbers(int x, int y) nogil:
printf("%i\n", x)
return x + y
 
z = add_two_numbers(123, 456)
print(z)
</syntaxhighlight>
 
== Spolupráce s jinými aplikacemi ==