Boucle while True bloquée
Fermé
bob12345
-
20 avril 2022 à 17:05
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 21 avril 2022 à 13:47
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 21 avril 2022 à 13:47
A voir également:
- While true python francais
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Acronis true image - Télécharger - Sauvegarde
- Dernière version ccleaner gratuit français - Télécharger - Nettoyage
- Wetransfer français - Télécharger - Téléchargement & Transfert
2 réponses
jee pee
Messages postés
40470
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
23 novembre 2024
9 427
20 avril 2022 à 17:13
20 avril 2022 à 17:13
Bonjour,
Je ne connais pas ces process sous python. Mais il semble logique que ton programme attende de recevoir quelque chose. Pour y mettre fin, soit il faudrait un timeout sur réception, soit que l’émetteur envoie un message de fin de communication.
Je ne connais pas ces process sous python. Mais il semble logique que ton programme attende de recevoir quelque chose. Pour y mettre fin, soit il faudrait un timeout sur réception, soit que l’émetteur envoie un message de fin de communication.
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
21 avril 2022 à 09:17
21 avril 2022 à 09:17
bonjour,
as-tu ajouté des print() afin de déterminer à quel endroit le programme était "bloqué"?
as-tu ajouté des print() afin de déterminer à quel endroit le programme était "bloqué"?
Oui j'ai essayé, il se bloque après la dernière ligne de la boucle. J'ai mis une autre condition pour voir si ça se débloque. L'émetteur envoi "stop' et la boucle est sensée s'arrêter si elle le reçoit. Mais même avec ça, elle reste bloquée. L'émetteur ne termine pas la connection, il fonctionne comme prévu: il envoie les données, puis envoie le stop et il lance une autre fonction.
EDIT: Je viens d'essayer un autre solution, elle ne marche pas, mais elle me donne certaines réponse:
Ce bout de code me donne une erreur car "8textstop" n'est pas un nombre. 8 est le nombre de bytes, text est le contenu du fichier txt que je veux envoyer et stop est le "stop". A ce stade je ne comprends plus rien, Je vais aussi mettre le code de l'émetteur pour que vous puissiez voir:
EDIT 2: Peut être que l'émetteur envoie tous les messages car j'utilisais "s.sendall" au lieu de "send".
with open(os.path.join(save_path, filename), "wb") as file_to_write: sizee = int("".join(map(chr, conn.recv(1024)))) #nombre de bytes à recevoir reciby = 0 #bytes reçus while reciby < sizee: dat = conn.recv(1024) file_to_write.write(dat) print("1") #Un print pour voir le comportement de la boucle reciby = reciby+1 file_to_write.close()
Ce bout de code me donne une erreur car "8textstop" n'est pas un nombre. 8 est le nombre de bytes, text est le contenu du fichier txt que je veux envoyer et stop est le "stop". A ce stade je ne comprends plus rien, Je vais aussi mettre le code de l'émetteur pour que vous puissiez voir:
#émetteur reqFile = s.recv(1024) reqfile = "".join(map(chr, reqFile)) size = os.path.getsize(reqfile) sized = str(size) s.send(sized.encode()) with open(reqfile, "rb") as file_to_send: for data in file_to_send: s.send(data) #J'utilisais s.sendall ici s.send("stop".encode()) print("sent")
EDIT 2: Peut être que l'émetteur envoie tous les messages car j'utilisais "s.sendall" au lieu de "send".
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
>
bob12345
21 avril 2022 à 12:44
21 avril 2022 à 12:44
Il me semble que ton message est foireux.
Au lieu de
Au lieu de
8textstop, j'enverrais
4.text.
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
>
bob12345
21 avril 2022 à 12:46
21 avril 2022 à 12:46
je pense que tu n'as pas mis assez de print().
dans quelle instruction se bloque-t-il?
dans quelle instruction se bloque-t-il?
bob12345
>
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
21 avril 2022 à 12:55
21 avril 2022 à 12:55
En fait le problème c'est que il n'est pas censé envoyer "8textstop ". Il doit envoyer 8 puis texte et stop. Mais bon de toute façon je vais le refaire entièrement si j'en ai le temps, ça m'a prit 2 jours et je ne peux pas me permettre de consacrer plus de temps à le faire. En tout cas, je vous remercie pour vos réponses.
20 avril 2022 à 18:54
Je vais essayer de mettre en place le timeout quand j'en aurais la possibilité et vous tiendrais au courant.
Merci de votre réponse.
20 avril 2022 à 22:30
21 avril 2022 à 09:19
21 avril 2022 à 09:20