un socket.receive() non bloquant .... [socket] - Python - Programmation
Marsh Posté le 05-05-2004 à 17:10:25
c'est curieux, cela devrait fonctionner...
essaye peut être de voir du côté de select.select() ?
Marsh Posté le 05-05-2004 à 17:14:32
j'ai pas testé ton exemple, mais
tu mélange timeout et blocking, je suis sur que ça foir ...
en mode non bloquant, quand y a rien à lire, ça retourne pas rien, ça lance une exception socket.error
Marsh Posté le 05-05-2004 à 17:24:23
Taz a écrit : j'ai pas testé ton exemple, mais |
oui c vrai, ce que je voudrais faire, c'est faire un receive de tps en tps or le receive n'accepte pas le timeout .... maintenant je pourrai me mettre en mode non bloquant mais comment créer une boucle pour faire ce receive à intervalle régulier ??
Marsh Posté le 05-05-2004 à 17:50:22
Taz a écrit : time.sleep(1.1) |
ha ok c'est tout con effectivement (désolé je débute en python), ms j'ai lu :
Citation : sleep(secs) Suspends execution for secs seconds. secs can be a float. |
et ça ve dire que mon prog va arreter de tourner pdt 'secs', non ?
or justement je veux qu'il tourne et puis qu'il fasse le receive tous les 'laps' ....
Marsh Posté le 05-05-2004 à 18:18:11
Taz a écrit : ben ton thread reçoit et dors voilà |
oui ms justement, g pas de thread et je dois pas en utiliser, ms bon je vais me débrouiller avec tout ça.
merci à vs 2 pour les réponses
++
vince
Marsh Posté le 05-05-2004 à 18:19:26
dtc .. tu vas faire un programme sous efficace et consommateur de CPU
Marsh Posté le 06-05-2004 à 10:37:30
euhh, a priori , ton programme est un thread que tu le veuilles ou non.
à confirmer ^^
Marsh Posté le 10-06-2004 à 17:14:37
C'est un peu tard, mais ca sera peut etre kan meme utile a kkun...
pour eviter le thread tout en concervant une vitesse d'excution correct de ton code tu utilise un compteur + un time.sleep avec une toute petite tempo !
genre :
Code :
|
vala
Marsh Posté le 10-06-2004 à 17:21:48
c'est peut etre pas tres elegant mais :
c'est ppas compliqué, y a pas de thread et ca ralenti pas 'trop' le reste du traitement.
tu aurai fait comment toi ?
Marsh Posté le 10-06-2004 à 17:34:52
ben non. si tu critique mon truc (qui je le reconnais est n'est pas tres 'clean') c'est que tu pense a mieu non ?
Marsh Posté le 05-05-2004 à 16:54:02
slt a tous,
voila je fais une appli en python qui reçoit des instructions de tps en tps et j'ai une restriction assez sérieuse : ne pas utiliser de thread !
Donc il faudrait que je puisse faire un receive de tps en tps pour vérifier si des instructions sont arrivées mais la méthode socket.receive() est bloquante donc mon prog arrête de tourner tant qu'il n'a rien reçu
Mon idée était de combiner le timeout et 1 boucle while mais ça ne fonctionne pas .... bon place au bout de code, ce sera + compréhensible :
Un exemple d'exécution donnerait ça :
Creating Socket
Binding Socket
Socket bound to Host=zsdev001,Port=10000
Listening to port 10000
no available connection, doing something else
hi! im doing something else
main: listen one more time ...
Listening to port 10000
no available connection, doing something else
hi! im doing something else
main: listen one more time ...
Listening to port 10000
Got connection from 192.168.1.130
Accepted Connection from: 192.168.1.130
main: ok, seemed to be connected now
Receiving data...
Traceback (most recent call last):
File "D:\zap-Lib\serv.py", line 69, in main
while self.Receive()==None:
File "D:\zap-Lib\serv.py", line 51, in Receive
received=self.conn.recv(size)
socket.error: (10035, 'The socket operation could not complete without blocking'
)
J'ai essayé de faire un self.Socket.setblocking(0) ms la methode receive reste bloquante ....
une idée ??
d'avance merci!
vince