<div dir="ltr"><div dir="ltr"><div dir="ltr">Hola de nuevo Alex, sigue igual. Veo que por http la velocidad es FULL siempre, he abierto un servidor http:<div><br></div><div>python -m http.server 9000<br></div><div><br></div><div>he probado a descargar un archivo y va siempre a 10-11Mb/s. Tal vez la mejor opción es tirar por ahí... pero me parece muy pesado utilizar un servidor http solo para las descargas, ¿es viable esa opción? o hay otras formas.</div><div><br></div><div>muchas gracias a todos por su tiempo</div><div><br></div><div>un saludo</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El lun., 22 abr. 2019 a las 19:42, Alexis Roda (<<a href="mailto:alexis.roda.villalonga@gmail.com">alexis.roda.villalonga@gmail.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hola,<div>tal vez el problema es que guardas en memoria el archivo, en una cadena. Las cadenas son inmutables, eso significa que la linea "buf += socket_cliente(...)" hace algo parecido a:</div><div><br></div><div>- reserva un nuevo bloque de memoria</div><div>- copia el valor original de buf</div><div>- copia el valor devuelto por la función</div><div><br></div><div>eso en cada iteración. No escala bien. Si además el archivo es grande, en comparación con la RAM del equipo, puede ocasionar el uso de la memoria de intercambio y ralentizar las cosas aún mas.</div><div><br></div><div>Prueba grabando en disco cada bloque según le recibes en lugar de esperar a tenerlos todos y guardar al final.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Missatge de PeRy <<a href="mailto:perysoy@gmail.com" target="_blank">perysoy@gmail.com</a>> del dia dl., 22 d’abr. 2019 a les 2:50:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br clear="all"><div>Buenas! Estoy aprendiendo Python y estoy con el tema de los sockets, he creado un servidor y cliente para enviar archivos. Me he dado cuenta que en archivos grandes cuanto mas pasa el tiempo mas lenta se hace la recepción de la información, ¿alguna sugerencia por qué pasa y como se podría evitar? mi codigo:</div><div><br></div><div>server:</div><div>=============================================================================================</div><div><div>elif b'\F' in data: # peticion de archivo para ser descargado</div><div><span style="white-space:pre-wrap"> </span>transmitido = data.rstrip(b'\F')</div><div><span style="white-space:pre-wrap"> </span>comparte_dir = os.path.join(os.getcwd(), 'compartir')</div><div><span style="white-space:pre-wrap"> </span>print(os.path.join(comparte_dir, transmitido.decode()))</div><div><span style="white-space:pre-wrap"> </span>filesize = os.path.getsize(os.path.join(comparte_dir, transmitido.decode()))</div><div><span style="white-space:pre-wrap"> </span>print("TAMAÑO: {}".format(filesize))</div><div><span style="white-space:pre-wrap"> </span>with open(os.path.join(comparte_dir, transmitido.decode()), 'rb') as f:</div><div><span style="white-space:pre-wrap"> </span>self.socket.send(struct.pack('!I', filesize)) # enviamos en los primeros 4bytes el tamaño del archivo</div><div><span style="white-space:pre-wrap"> </span>numero_bytes = self.socket.sendfile(f)</div></div><div><div> # data = f.read(8192)</div><div><span style="white-space:pre-wrap"> </span># numero_bytes = len(data)</div><div><span style="white-space:pre-wrap"> </span># self.socket.send(data)</div><div><span style="white-space:pre-wrap"> </span># while data:</div><div><span style="white-space:pre-wrap"> </span># <span style="white-space:pre-wrap"> </span>data = f.read(8192)</div><div><span style="white-space:pre-wrap"> </span># <span style="white-space:pre-wrap"> </span>self.socket.send(data)</div><div><span style="white-space:pre-wrap"> </span># <span style="white-space:pre-wrap"> </span>numero_bytes += len(data)</div></div><div> print(numero_bytes)</div><div><br></div><div>cliente:</div><div>===============================================================================================</div><div><div>with open(archivo, 'wb') as f: </div><div> buf = socket_cliente.recv(4) # cabecera con elt amaño del archivo</div><div> filesize = struct.unpack('!I', buf)</div><div> print("filesize : {}".format(filesize))</div><div> filesize=filesize[0]</div><div> buf = b''</div><div> tiempo_inicio = datetime.datetime.now()</div><div> print(tiempo_inicio.strftime('%H:%M:%S'))</div><div> while len(buf) < filesize:</div><div> to_read = filesize - len(buf)</div><div> buf += socket_cliente.recv(262144 if to_read > 262144 else to_read) #8192 1024*8 o 4096 1024*4</div><div> updt(filesize, len(buf)) # barra de progreso</div><div> f.write(buf) </div></div><div><br></div><div>---------------------</div><div>Muchas Gracias y un saludo</div><div><br></div></div></div></div></div>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
</blockquote></div>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
</blockquote></div><br clear="all"><div><br></div></div>