[Python] problème avec les threads
Résolu/Fermé
A voir également:
- [Python] problème avec les threads
- Citizen code python avis - Accueil - Outils
- Mot secret python pix ✓ - Forum Python
- Python generator - Télécharger - Sécurité
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
4 réponses
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
6 oct. 2011 à 21:49
6 oct. 2011 à 21:49
Bonsoir,
Il se peut que ce soit dû au fait que l'exécution utilise une méthode d'une instance d'une classe que tu as définie toi même
L'appel d'une méthode déclenche en fait l'appel d'une fonction attachée à l' instance concernée, et qui est traitée d'une façon particulière par l'interpréteur:
quand une méthode est appelée, la fonction associée reçoit automatiquement l'identité de l'instance qui comporte la méthode / fonction en question.
L'identité, c'est donné par la fonction id() si on veut la connaître, mais peu importe le but n'est pas de savoiir ce qui est passé comme premier argument à la fonction, c'est de savoir qu'elle reçoit TOUJOURS une donnée l'informant de quelle est l'instance concernée, même quand on ne met pas d'argument dans l'appel de la méthode
Nota bene:
il faut bien distinguer la méthode:
a.met(x,12,'bu') ici on passe 3 arguments à la méthode de l'instance a
et la fonction associée:
func(info sur l'instance, x, 12, 'bu' ) ici 4 arguments puisque le premier est automatiquement fourni à la fonction
Le premier argument est reçu par le premier paramètre de la définition de la méthode (ou plutôt de la fonction) , celui qu'on appelle de façon conventionnelle self lorsqu'on définit une classe
Enfin , tout ça pour dire qu'il arrive qu'on utilise maintes fois une méthode sans lui passer d'objet en argument, ignorant que par dessous la fonction va recevoir une info sur l'instance en première position , tout le temps.
Et puis un beau jour, on utilise la méthode avec un argument alors qu'on ne devrait pas, et au lieu d'avoir un message d'erreur disant qu'il y a 1 argument de trop, on découvre celui qui tu as obtenu, avertissant que la fonction reçoit deux arguments et on se demande quel autre.
La tournure du message d'erreur que tu rapportes me fait fortement penser à cette explication.
Si ce n'est pas ça, il faudrait fournir plus de code pour qu'on puisse chercher quelle autre raison peut exister pour ton programme
Il se peut que ce soit dû au fait que l'exécution utilise une méthode d'une instance d'une classe que tu as définie toi même
L'appel d'une méthode déclenche en fait l'appel d'une fonction attachée à l' instance concernée, et qui est traitée d'une façon particulière par l'interpréteur:
quand une méthode est appelée, la fonction associée reçoit automatiquement l'identité de l'instance qui comporte la méthode / fonction en question.
L'identité, c'est donné par la fonction id() si on veut la connaître, mais peu importe le but n'est pas de savoiir ce qui est passé comme premier argument à la fonction, c'est de savoir qu'elle reçoit TOUJOURS une donnée l'informant de quelle est l'instance concernée, même quand on ne met pas d'argument dans l'appel de la méthode
Nota bene:
il faut bien distinguer la méthode:
a.met(x,12,'bu') ici on passe 3 arguments à la méthode de l'instance a
et la fonction associée:
func(info sur l'instance, x, 12, 'bu' ) ici 4 arguments puisque le premier est automatiquement fourni à la fonction
Le premier argument est reçu par le premier paramètre de la définition de la méthode (ou plutôt de la fonction) , celui qu'on appelle de façon conventionnelle self lorsqu'on définit une classe
Enfin , tout ça pour dire qu'il arrive qu'on utilise maintes fois une méthode sans lui passer d'objet en argument, ignorant que par dessous la fonction va recevoir une info sur l'instance en première position , tout le temps.
Et puis un beau jour, on utilise la méthode avec un argument alors qu'on ne devrait pas, et au lieu d'avoir un message d'erreur disant qu'il y a 1 argument de trop, on découvre celui qui tu as obtenu, avertissant que la fonction reçoit deux arguments et on se demande quel autre.
La tournure du message d'erreur que tu rapportes me fait fortement penser à cette explication.
Si ce n'est pas ça, il faudrait fournir plus de code pour qu'on puisse chercher quelle autre raison peut exister pour ton programme
Utilisateur anonyme
6 oct. 2011 à 22:36
6 oct. 2011 à 22:36
La raison est qu'il faut envoyer un tuple ou une liste comme argument au thread
donc le rajoute d'une virgule après str(i) fait que tous fonctionne bien.
threading.Thread(target=IdentificationClient, args=(str(i),)).start()
et non :
threading.Thread(target=IdentificationClient, args=(str(i))).start()
donc le rajoute d'une virgule après str(i) fait que tous fonctionne bien.
threading.Thread(target=IdentificationClient, args=(str(i),)).start()
et non :
threading.Thread(target=IdentificationClient, args=(str(i))).start()
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
6 oct. 2011 à 22:59
6 oct. 2011 à 22:59
ah OK
et bien en effet, il suffisait de mieux lire ta question pour comprendre de quoi il retournait
str(10) est en effet une chaîne comportant deux éléments, et les praenthèses autour ne changent rien, (str(10)) est toujours la même chaîne je lirai mieux les questions à partir de maintenant
et bien en effet, il suffisait de mieux lire ta question pour comprendre de quoi il retournait
str(10) est en effet une chaîne comportant deux éléments, et les praenthèses autour ne changent rien, (str(10)) est toujours la même chaîne je lirai mieux les questions à partir de maintenant
Utilisateur anonyme
7 oct. 2011 à 01:09
7 oct. 2011 à 01:09
Merci quand même d'avoir pris le temps de répondre à ma question.