bon voila, en ce moment je travaille avec python et sa bibliothèque de manipulation d'images,
ça marche plutôt pas mal, la bibliothèque en question est trés abordable, python lui même est 'facile', même pour moi qui suit un non programmeur... bref, en fait je remarque que quand mon programme travaille (précision : c'est pas du temps réel) il n'utilise qu'un seul processeur
dommage car ma routine est assez (même trés) simple mais le nombre de pixels sur lesquelles elle travaille est important, donc j'aimerais bien arriver à utiliser ce fameux coreduo pour booster un peu mes rendus...
si quelqu'un dans l'assistance à ce genre d'expérience ?
Hors ligne
Essaye de regarder ça :
http://pypi.python.org/pypi/processing
EDIT : Sinon, regarde du côté de Jython, IronPython ou CPython
Re-EDIT : Yop :
citation :
It might be that you have to set the CPU affinity for your python process so
that it works at all. I had that problem on a dual core machine with
hyperthread enabled. Using taskset
(http://www.linuxcommand.org/man_pages/taskset1.html) helped solving the
problem:
taskset -c <CPU#> python ...
Best regards,
wr
+
+
Dernière modification par 22_80 (2008-06-23 16:02:47)
Hors ligne
mouerf...
d'aprés ce que je comprends c'est un peu chiant à gérer les threads : faut séparer les taches et synchroniser ce qui doit l'être, en faisant attention que 2 process touchent pas aux mêmes valeurs... bref... pataugeage intense pour moi la ...
en plus, du coup, dépité, j'ai réécris mon programme en c++ et ben celui en python est bien plus rapide... si si ...
avec python j'utilise les lib Image, ImageDraw, ImageColor et en cpp la lib magick++
zarbi² quoi...
si ya pas d'autres idées dans la salle, je vais simplement en rester à jouer avec mon petit python monocœur moi je crois...
Dernière modification par rep (2008-06-25 16:52:42)
Hors ligne
Tu as essayé la commande linux du dernier lien ?
Hors ligne
oui mais c'est juste pour choisir, ou limiter (si on a plein de procs), sur quel(s) processeur(s) lancer le programme, mais pas pour répartir une tache 'monothread' sur deux cœurs...
Hors ligne
Salut rep,
tu pex aussi fairedu threading directement dans Python, il y a un chapitre là-dessus dans le "guide de survie du programmeur python" que je recommande.
++
O.
Hors ligne
Bonjour tout le monde!!
Je vais essayer d'être concis...
On peut utiliser le module threading de python pour créer des threads python (eux même wrappés dans des threads natifs). Malheureusement, pour faciliter la programmation, l'ami Guido a préféré mettre en place un mutex global (le GIL) garantissant l'atomicité de chacune des instructions. Ce GIL empèche les threads de s'exécuter de manière simultanée (sur deux proc/core distincts) car il doit être verrouillé pour chaque instruction python. Si vous voulez vraiment avoir du code qui tourne en parallèle, il va falloir vous passer du partage de la mémoire (utiliser plusieurs processus ou utiliser la fonction clone de linux).
Personellement, je vais vers du code en D piloté par python. De cette manière, j'ai un code multi-threadé rapide d'un coté et un langage de script puissant pour lier mes différents modules.
Dernière modification par drjnut (2008-06-26 11:24:45)
Hors ligne
oui c'est ce que je pensais faire au début,
j'aime bien python et l'idée de réaliser un programme multithread directement avec ce langage me branchait bien jusqu'à ce que je m'aperçoive que j'y pipai que dalle...
t'as une expérience avec ça toi ?
et c'est quoi "guide de survie du programmeur python" ? un livre ? parce que je trouve pas la ref ...
Hors ligne
Travaillant avec Zope au taf et ayant commencé un framework réseau "à la" twisted en python, je me suis pas mal de fois posé la question du multiproc.
Pour ce qui est de zope, on lance simplement une instance (zeoclient) par proc et une base de donnée (zeoserver). Ce qui prends le plus de temps est effectué sur les zeoclients. Il ne partagent pas de mémoire et sont donc libre de tourner sur leur proc sans avoir à attendre un lock. Le zeoserver lui fédère les accès base de données et gère les conflits.
Pour ce qui est de mon framework, j'ai commencé à implémenter une couche C/D qui me permet de lancer plusieurs interpréteurs python qui partagent leur table de descripteur de fichier, mais pas la mémoire et ont donc des GILs distincts.
Je pense qu'avant tout, il faut réfléchir à la manière dont on peut répartir le calcul en minimisant les interactions et éviter de lancer trop de thread pour améliorer le débit de traitement.
J'espère que cette prose aidera quelqu'un ;-)
Hors ligne
hé salut drjnut, content de te voir par ici!
nos posts ce sont croisés, en fait mes questions étaient destinées à oli44, mais sans que je le voie t'avais posté avant moi !! , bref.. pas grave...
en tout cas merci bien de tes clarifications... qui me laissent toutefois perplexes quant au multithreading avec python... en fait j'ai une simple opération à faire (analyse de couleur, dessin d'une ligne) sur un tas de pixels, donc c'est relativement simple et linéaire : 2 boucles imbriquées parcourent l'ensemble de ma trame 2D, j'extraie le couleur, puis je peint... simplissime...... mais alors donc je vois mal comment je pourrais faire pour scinder puis distribuer le process...
est ce qu'un truc comme ça serait envisageable : un thread (donc une boucle) s'occupe des pixels à coordonnées 'pairs' et l'autre des pixels 'impairs' ?
et l'accés à l'image serait géré de façon à ce qu'un process ne puisse pas bosser dessus tant que l'autre n'a pas libéré la ressource...
j'ai bon???
Dernière modification par rep (2008-06-26 17:40:08)
Hors ligne
rep a écrit:
hé salut drjnut, content de te voir par ici!
Je l'ai appellé à la rescousse, je sais qu'il taquine du python ...
Hors ligne
Salut rep,
Brad Daily " Python, le guide de survie" chez CampusPress, mais je crois que c'est trop succicnt pour ce que tu veux faire!
++
O.
Hors ligne
humpf j'ai toujours pas trouvé comment multithreader mon code....
j'ai sous la main "python précis et concis" qui est très bien mais trop trop concis
donc effectivement je vais peut être me laisser tenter par un de ces ouvrages imprimés, et vendus en magazin, destinés à dévaster la forêt amazoniene...
par contre j'y ai ajouté une petite interface graphique en tkinter dont je suis assez content... (c moche mais fonctionnel)
Dernière modification par rep (2008-07-10 10:36:30)
Hors ligne