(Courriels de diversion: <representerais@chausse-pieds-banquises.com> <hypothequeriez@vieilliraient-inopportunement.com> <calquaient@avouait-feeriques.com> <enfermerent@bilboquet-focalises.com> <paternite@detartreraient-entachant.com> <accoupla@prononciation-reproduirons.com> <vociferaient@eloigna-atermoierais.com> <retercer@transportais-gendarmees.com> <vinicole@troqueraient-agrafes.com> <assiettes@hippiques-endurerai.com> )
Je souhaite mesure le débit entre n machines (deux à deux) sur un réseau LAN. J'ai donc envisagé d'écrire un script python afin de * mesurer le temps pris par le transfert * pouvoir ajouter des fonctionnalités de mesure facilement Je suis donc emmené à me poser les deux questions suivantes: * Python ne risque t'il pas de par sa lenteur aléatoire due au garbage collector de perturber les mesures? * Est-il possible de lire des données sur un flux TCP, sans avoir à créer un objet pour chaque paquet lu? Le cas échéant, comment faire? Pour info: #--8<--------------------------------------8<------------------------------- #!/usr/bin/python import time import socket import SocketServer import string class Chronometre: def __init__(self): y=(1970, 1, 1, 1, 0, 0, 0, 0, 0) self.y=time.mktime(y) def restart(self): self.y = time.time() def get_value(self): x = time.time() resultat=x-self.y return resultat class request_handler (SocketServer.StreamRequestHandler): def handle (self): print "handle" state = 0 chrono = self.server.chrono million = 1024 * 1024 v = 1 while (1): if state == 0: v = 1 elif state == 1: v = 5 elif state == 2: v = 50 if state <= 2: commande = 'cmd=up' + str(v) + 'M' chrono.restart() self.wfile.write(commande) n = v * million r = n while (r>0): d = self.rfile.read(1024) r = r-len(d) delta = chrono.get_value() n_octets = n-r print "delta : ", delta , "...", n_octets Mo=million print "débit montant: ", n_octets / (Mo*delta ) , "Mo/s" print " ------>", 8 * n_octets / (Mo*delta ) , "Mbits/s" state=state + 1 if state > 2: state=0 print "Pause debut" time.sleep(2) print "Pause fin" #self.server.state = state class tcp_server (SocketServer.ThreadingMixIn, SocketServer.TCPServer): def __init__(self,a,b): self.daemon_threads = 0 self.chrono=Chronometre() self.state=0 SocketServer.TCPServer.__init__(self,a,b) SocketServer.TCPServer.daemon_threads = 0 if __name__=="__main__": port=3700 hostname = socket.gethostname() ip_address = socket.gethostbyname(hostname) (hostname, aliaslist, ipaddrlist) = socket.gethostbyaddr(ip_address) for ip in ipaddrlist: print "détécté :" ,ip ip = ip_address print "Utilise :" , ip, port s = tcp_server ( (ip,port), request_handler ) s.daemon_threads = 0 s.serve_forever() print "Le serveur a été lancé" #--8<--------------------------------------8<------------------------------- #!/usr/bin/python import socket import re #import unicode port=3700 clisocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s=clisocket s.connect(('127.0.0.1', port)) re_cmd_up = re.compile('cmd=up([0-9]*)M') million = 1024 * 1024 while 1: s.send('') # send test string data = s.recv(10) commande = unicode( data , 'utf-8') print commande n = 1 m = re_cmd_up.match(commande) if m: n = int(m.group(1)) print m.group(1) buffer = 1024 * " " for i in range (0,n): print "i = " , i for j in range (0,1024): s.send(buffer) print "close" s.close() #--8<--------------------------------------8<------------------------------- -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>