Actualizar a la publicación original: Un colega me señaló lo que estaba haciendo mal. Daré la explicación en la parte inferior de la publicación, ya que podría ser útil para otros.límites de tasa udp en python?
estoy tratando de obtener una comprensión básica de los límites de rendimiento de la red de los programas en Python y se han topado con una anomalía. El fragmento de código
while 1:
sock.sendto("a",target)
envía paquetes UDP a una máquina de destino, tan rápido como el host enviará. Mido una tasa de envío de poco más de 4000 paquetes por segundo, o 250 us por paquete. Esto parece lento, incluso para un lenguaje interpretado como python (el programa se ejecuta en un opteron AMD de 2 GHz, Linux, versión 2.6.6 de python). He visto un rendimiento mucho mejor en python para TCP, así que esto me parece un poco raro.
Si funciono esto en el fondo y la parte superior corro, me parece que está utilizando Python sólo el 25% de la CPU, lo que sugiere que pitón puede ser retrasar artificialmente la transmisión de paquetes UDP.
¿Alguien más ha experimentado algo similar? ¿Alguien sabe si python limita la velocidad de transmisión de paquetes, y si hay una forma de desactivar ?
BTW, un programa similar de C++ puede enviar más de 200,000 paquetes por segundo, , por lo que no es un límite intrínseco de la plataforma o el sistema operativo.
Por lo tanto, resultó que cometí un error novato tonto. Me olvidé de llamar a gethostbyname explícitamente. En consecuencia, la dirección de destino en el comando sendto contenía un nombre simbólico. Esto desencadenaba una resolución de nombre cada vez que se enviaba un paquete a . Después de arreglar esto, mido una tasa de envío máxima de aproximadamente 120,000 p/s. Mucho mejor.
Todavía sorprendente, habría pensado que la resolución del nombre se almacenaría en caché. Debe seguir adelante y proporcionar su resolución como respuesta. –