J'ai créé un programme python qui fonctionne parfaitement seulement il est très long, son exécution prend de quelques minutes à quelques heures. Je voudrais donc accélérer l’exécution de ce programme avec le module Cython d'autant plus que mon programme utilise beaucoup le module numpy sur lequel il est efficace.
J'ai déjà installer cython via la commande py -m pip install cython, j'ai mis à jour pip. Rien n'y fait lorsque je tape 'from cython.Build import cythonize', python me renvoie No module named cython.Build, Cython is not a package. J'ai lu une bonne trentaine de forum et des sites je ne trouve aucune solution qui marche et je désespère un peu.
Quel peut être le problème et comment le résoudre?
J'ai créé un programme python qui fonctionne parfaitement seulement il est très long, son exécution prend de quelques minutes à quelques heures. Je voudrais donc accélérer l’exécution de ce programme avec le module Cython d'autant plus que mon programme utilise beaucoup le module numpy sur lequel il est efficace.
Avant que tu te lances dans quelque chose de compliqué et peut-être d'inutile, je te conseillerais, en particulier si tu es débutant, d'examiner la complexité de ton algorithme et éventuellement de le changer, c'est la source la plus importante, et de loin, de toute accélération de code.
En admettant que ton algorithme soit optimal avec la bonne complexité, il se peut que tu aies besoin de booster Python (et tout dépend de tes objectifs). Ne crois pas que Cython va accélérer ton code sans rien faire. Tu peux lancer Cython sur du code Python mais la plupart d temps, le gain est très modeste. Tu vas devoir typer tes variables et éventuellement faire des choses plus compliquées, grosso modo tu vas devoir écrire du C en Python, avec des allocations dynamiques et des libérations (à moins que tu n'utilises du C++ et la STL ou RAII).
Vu que tu dis que ton code va utiliser des tableaus Numpy, je te conseille avant de te lancer dans Cython (je vois que tu galères juste pour l'installer) d'examiner Numba qui permet d'atteindre les performances d'un code C/C++en n'écrivant que du Python. Attention, ça ne marche que pour un certain type de code, du code qui fait de lourdes opérations mathématiques dans des boucles sur des tableaux Numpy. Tu peux obtenir des performances même meilleures que du C++. Tu peux aussi paralléliser assez facilement (mais c'est aussi assez facile en Cython) et même envoyer ton code sur ton GPU assez facilement.
Mais je répète, tout code Python ne sera pas optimisé par Numba, voir ici pour les cas d'usage. En outre, sous EduPython, c'est peut-être compliqué à installer.
Merci beaucoup pour le conseil, je ne connaissais pas la solution numba qui semble effectivement efficace et plus simple d'utilisation. J'ai fait un petit test le programme a mis 1 min 10 avec numba contre 8min 23 sans le gain est important.
Petite information pour les utilisateurs novices d'EduPython (comme moi) qui tomberont sur ce forum, pour installer de nouveaux modules il faut préalablement installer get-pip.py comme expliqué sur ce lien http://info.blaisepascal.fr/edupython pour installer numba utilisez conda et lorsque la commande demande proceed [y]/n? taper yes entrer.
Merci beaucoup pour le conseil, je ne connaissais pas la solution numba qui semble effectivement efficace et plus simple d'utilisation. J'ai fait un petit test le programme a mis 1 min 10 avec numba contre 8min 23 sans le gain est important.
En principe les gains sont beaucoup plus importants (jusqu'à des facteurs de l'ordre de 100) mais il ne faut travailler qu'avec des objets Numpy (et encore, pas tous) et ne pas sortir du mode "nopython". Vous auriez pu essayer Pypy mais comme vous avez du Numpy, ça ne donnera rien. Faudra peut-être essayer Cython alors
trama a écrit:
Petite information pour les utilisateurs novices d'EduPython (comme moi) qui tomberont sur ce forum, pour installer de nouveaux modules il faut préalablement installer get-pip.py comme expliqué sur ce lien http://info.blaisepascal.fr/edupython pour installer numba utilisez conda et lorsque la commande demande proceed [y]/n? taper yes entrer.
Et c'est possible de combiner ? Par ex pypy + numba
Tiens oui, pourquoi pas cumuler ! Alors, j'aurais dit que non car Pypy supporte mal les extensions C (et c'est le cas de Numba même si le backend est LLVM) mais visiblement ce serait possible, comme le montrent qq benchmarks ICI mais bon, ça semble vraiment assez expérimental, d'ailleurs tous les tests ne passent pas !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères