Quelqu'un utilise t il Nuitka ?

L'auteur de ce sujet a trouvé une solution à son problème.
Staff

C'est un avis personnel, j'utilise Python professionnellement depuis plusieurs années, dont dans des domaines où je faisais du calcul intensif, et je n'ai jamais eu besoin de ce genre de compilateurs pour Python.

+0 -0
Auteur du sujet

la partie calcul tu faisais du cimport ou un truc du genre dessus pour l’accélérer ?

l' intérêt c'est d'aller plus vite et pourquoi pas obfusquer un petit peu, ou le rendre utilisable directement chez quelqu’un qui ne veut pas ou ne peux pas installer python.

+0 -0
Staff

Oui numpy pour le gros du calcul, avec des passage en cython pour les rares fonctions qui nécessite de boucler et où on ne peut pas vectoriser facilement avec les fonctions fournit par numpy.

Pour autant, sur pygame, je ne suis pas sûrs que le goulot d'étranglement soit l'interpréteur. Il n'y a que là où un changement par ce genre d'outils peut apporter. Il y a plus de chance que ce soit des limites de la SDL ou de la façon de gérer les ressources par pygame. Je doute (mais c'est pas impossible, j'ai jamais essayé) que tu gagne beaucoup en utilisant nuitka.

+4 -0

Si on parle uniquement d'optimisation, je ne vois pas quel avantage a Nuitka par rapport à Cython. Mais comme alternative aux freezer de code (cxfreeze, py2exe, etc), il a surement ses chances.

ben si je code un jeu 2d avec pygame, si y'a du monde à l’écran je serai bien content d' accélérer les choses, avec ou sans numpy.

buffalo974

Essaye avec une vraie bibliothèque de jeu 2D comme Cocos2d.

+0 -0

Mais comme alternative aux freezer de code (cxfreeze, py2exe, etc)

psycopy

Mais y a-t-il vraiment des gens qui utilisent ces horreurs ?

Ils ne servent qu'à polluer inutilement les machines en installant un interpréteur Python et toutes ses dépendances par programme, non ?

Auteur du sujet

ben d' après ce que j'ai compris avec Nuitka tu codes en python3. Avec cython , tu codes en cython. Je ne connaissais pas Cocos2d, mais l' avantage de pygame est d' avoir une efficacité et une grosse communauté , ex la pyweek : pyweek

+0 -0
Staff

ben d' après ce que j'ai compris avec Nuitka tu codes en python3. Avec cython , tu codes en cython.

En effet mais c'est très efficace et ça s'intègre tres bien dans la chaine. C'est particulièrement vrai car Cython permet de typer et de préciser les types des tableaux numpy.

Je ne connaissais pas Cocos2d, mais l' avantage de pygame est d' avoir une efficacité et une grosse communauté

Je ne critique pas pygame, que je ne connais pas mais qui a très bonne réputation. Je met juste en évidence que c'est loin d'être évident qu'utiliser Nuitka te permette de gagner beaucoup de temps ou d'afficher plus de choses à l'écran. Il faut identifier où est le goulot d'étranglement. Si celui-ci est un problème algorithmique sur la façon dont sont gérés les ressources à l'écran, utiliser nuitka ne t'aidera pas beaucoup. Tu gagnera le temps de parsage, en gros, mais ça ne représentera pas beaucoup.

Si je dis que je trouve que ça a relativement peu d'intéret c'est que généralement le gros des goulots d'étranglements n'est pas là. Si j'utilise cython c'est parce que les boucles en python, sur de grands tableaux, sont lentes et que le cout devient disproportionné par rapport aux autres traitements. Quand j'ai des fonctions numpy qui me permettent de vectoriser facilement le calcul, je ne le fais pas, je gagnerai quelques % de temps de traitements pour beaucoup trop d'emmerdes.

Dans le cas de pygame, il est probable que la majorité du temps soit passé dans la SDL plus que dans le code python de ton appli ou dans pygame. Exemple : si pygame est mal foutu et renvois à la carte graphiques toutes les images à chaque tour de boucle (le transfert de mémoire vers la carte graphique est une opération lente), alors compiler avec nuitka ne changera rien.

Il est difficile de juger sans connaitre la lib mais il est peu probable que le problème vienne de Python. Vouloir accélérer ton appli en sortant nuitka semble être une fausse bonne idée. Quand je vois les exemples sur le site de pygame, il semble tout a fait capable de gérer beaucoup de choses à l'écran. Le problème vient donc peut être de ton code qui l'utilise mal. Utiliser nuitka ne te donnera qu'un gain marginal dans un tel cas. La meilleur solution est de mieux utiliser la lib.

Édité par Kje

+1 -0

À noter que Cython peut aussi compiler du Python (peu importe la version) sans rien coder en langage Cython. Ce qui doit revenir au même que d'utiliser Nuitka, à priori.

Édité par psycopy

+0 -0
Auteur du sujet

@kje : je médite la-dessus :)

@psycopy : intéressant, je savais pas

@entwane : c'est pratique si tu déboules chez un pote ou dans une administration et que tu peux pas installer python.

@pierre24 : je cherche comment exploiter numpy dans un jeu, peut être pour du graphisme mais là vaut mieux aller sur du c++ du coup …

Édité par buffalo974

+0 -0
Staff

Perso j'ai longtemps bossé sur un système en Python dont les perfs étaient critiques, en me disant que j'ai toujours la ressource d'utiliser Cython en cas de soucis.

Au bout d'un an et demie, la codebase titillait les 20k lignes de code avec en tout et pour tout un seul module de 500 lignes en Cython, soit 2.5% du code, mais dont les fonctions étaient appelées plusieurs centaines de millions de fois par seconde (sur tout le système, hein, parce qu'une opération élémentaire en Python se chiffre en μs sur un seul fil d'exécution).

Bien sûr à ce stade il y avait encore de lourds progrès possibles à faire en perfs, mais le système restait parfaitement concurrentiel (les volumes de données traités étaient vendables) et la leçon que j'en ai tiré, personnellement, c'est que changer radicalement de langage ou s'imposer d'énormes contraintes pour "seulement" gagner des perfs n'est pas utile la plupart du temps. Y'en a qui l'ont fait avec succès, bien sûr (je suis tombé recemment sur un billet d'une équipe qui avait troqué Python+tornado contre Go et qui en étaient ravis), mais ça reste des cas particuliers. Mon cas également était particulier d'ailleurs. Le plus gros de mes optimisations consistait à faire attention aux algorithmes que j'utilisais, à utiliser Redis pour créer des IPC faciles et des caches partagés, et à limiter le nombre d'appels systèmes inutiles.

Pour gagner des perfs, la première chose, indispensable, à faire, c'est de profiler le code incriminé et regarder où tu passes le plus de temps et les fonctions que tu appelles le plus souvent. Sans cette connaissance tu ne peux pas déterminer quoi faire, et encore moins savoir si une solution X ou Y va t'aider ou non. Il y a des tonnes de choses possibles en Python, mais comme dans tous les langages, "no silver bullet".

Quant à partir sur un projet en s'infligeant C++ uniquement à cause de présomptions sur les performances et sans reelle contrainte d'infrastructure (style "mon soft doit être rapide ET tourner avec des super perfs sur un raspberry pi"), je trouve ça contre-productif. En optimisation aussi il y a une loi des 80-20 : 80% du temps d'exécution se déroulera dans une zone qui représente 20% du code, le reste n'ayant qu'un impact négligeable sur les performances. Dans ces conditions, autant coder ces 80% de code "neutre" dans un langage malléable comme python pour faciliter les évolutions du code et la réactivité face aux feature requests ou aux rapports de bugs.

Édité par nohar

I was a llama before it was cool

+0 -0

pour appeler des bouts de code C : http://sametmax.com/appeler-du-code-c-depuis-python-avec-ctypes/

buffalo974

Oui c'est l'utilisation de ctypes quand même bien moins simple d'utilisation que cython, qui permet de jouer entre la syntaxe python et la syntaxe C/C++.

Perso, même si j'ai joué avec pendant un bon moment, je trouve cython nettement plus abordable, surtout qu'en général il générera un code C nettement plus optimisé que celui que tu pourrais créer avec l'API Python.

Je vais quand même répondre concernant Nuitka, où j'avais lu sur une page des tests algorithmiques où pour la moitié il égalait cython, mais pour l'autre moitié était nettement en dessous (certaines fois, 2 à 3 fois moins efficace). C'est un concept intéressant, mais sa maturité ne me semble pas suffisante pour accrocher cython. Testes cython, c'est un langage à lui seul vraiment plaisant à coder et la documentation est "suffisante" en collaboration avec les réponses de SO.

Je ne suis pas développeur professionnel, mais si on me demandait de choisir un langage pour développer, je choisirai cython avec l'interfaçage python/C++, bien-sûr c'est utopique, car en général on t'impose le langage, mais c'est un autre sujet de discussion. Dans ce cas, je trouve le post de nohar tout à fait plausible, 80% ne mérite pas forcément de performance, pourquoi se priver de la simplicité de coder en python ?

Donc pour nuitka, faudra attendre un peu je pense ;)

Édité par fred1599

+0 -0

oui la réponse de Nohar est pertinente. Fred pourrais tu mettre sur github , ou envoyer par mail tes projets faits avec cython ?

buffalo974

Je n'ai pas de projet, mais dès que j'ai un PC sous la main, je montre quelques exemples simples…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte