Lancer un thread et passage de paramètre - Python - Programmation
Marsh Posté le 28-05-2004 à 16:52:34
wrap tout dans une autre fonction ou une lamnda
s.AddTash(lambda : t1(x), ...)
pour attêter tes thread utilises des threading.Event et pas des sleep
Marsh Posté le 28-05-2004 à 17:14:13
Merci beaucoup, ça marche bien, mais j'ai un autre problème.
Je veux lancer t1(x) avec des arguments différents, donc je pensait faire :
Code :
|
Mais ça me prend en compte toujours "toto2".
pourtant je pensait que chaque thread garderait son paramètre ?
Marsh Posté le 28-05-2004 à 17:15:20
ben tu leur passe x, donc la référence, si tu modifies x ...
Marsh Posté le 28-05-2004 à 17:18:45
Oui, justement.
en fait je lis un fichier avec des paramètres.
Mais je ne sais pas combien de paramètres je vais avoir donc, je lis une ligne, je met le paramètre dans x et je fais mon AddTask(t1(x), ...).
Je vais chercher un peu ...
Merci
Marsh Posté le 28-05-2004 à 18:37:52
Voilà, j'essaie de passer par un dictionnaire.
Donc je crée un dictionnaire : dict = {}
Puis dans une boucle, je lis mon fichier ligne par ligne et j'ajoute les arguments dans mon dictionnaire :
Code :
|
à la fin de la boucle, quand j'affiche dict, tout est OK, j'ai bien tous mes arguments.
Ensuite, je fais mes :
Code :
|
dans une autre boucle, mais j'ai l'erreur suivante :
AddTask(lambda : a[i], int(arg3), int(arg4))
KeyError: 2
Merci de votre aide.
Marsh Posté le 28-05-2004 à 18:38:55
oupss :
la dernière ligne est :
AddTask(lambda : dict[i], int(arg3), int(arg4))
KeyError: 2
désolé, faute de frappe
Marsh Posté le 28-05-2004 à 18:51:29
écoute : consolide tes bases (parce que la tu bites rien aux références) et après crée un objet fonction (un objet qui porte ses arguments et qui fournit __call__)
Marsh Posté le 01-06-2004 à 15:32:30
Salut,
en effet, j'ai surement pas toutes les bonnes bases pour me lancer dans les threads, je me suis pour l'instant servi de python uniquement pour des petits scripts d'administration (suppression/copie de fichiers, purges...), je trouve ce language très simple et très pratique pour faire ce genre d'actions.
Mais aujourd'hui, j'ai besoin de faire d'autres choses et c'est pourquoi je demande de l'aide.
Pour en revenir au problème, j'ai créé un objet avec 4 arguments mais je ne comprends pas ce que tu veux dire par "qui fournit __call__", le peu de chose que j'ai trouvé sur internet là-dessus n'ont pas été très clair.
Si tu pouvais détailler ?
Merci
Marsh Posté le 01-06-2004 à 18:01:14
J'ai résolu mon problème :
J'ai modifier ma classe Task, qui devient ceci :
Code :
|
J'y ai rajouté deux fonctions, t1 et t2 qui sont mes 2 tâches (que je veux lancer plusieurs fois avec des arguments différents).
Et 1 paramètre qui est l'arguments que je veux passer en paramètre à t1 ou t2 selon l'action que je veux effectuer.
Maintenant je peux déclarer autant de AddTask(...) que je veux. C'est toujours t1 ou t2 qui se lancent, mais maintenant les fonctions conservent mes arguments.
Merci pour votre aide.
PS : Si vous avez des suggéstions, je suis toujours preneur ...
Marsh Posté le 28-05-2004 à 16:48:06
Salut à tous,
je suis en train de me lancer dans les thread, et j'ai récupérer plusieurs infos entre la doc et les exemples sur internet.
j'en suis arrivé à faire ceci :
ce que je n'arrive pas à faire, c'est mettre un paramètre à la fonction t1(arg). Puis de le passer dans s.AddTask(t1(arg), ...) ou s.AddTask(t1,..., arg).
Si vous avez des idées.
Merci