es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los métodos sendto y recvfrom de Python consumen mucho tiempo en Python.

Estoy trabajando en un programa que puede enviar archivos y mensajes de un Cliente a un Servidor. Para enviar archivos a través de la red estoy utilizando UDP (el programa es para una tarea escolar y no puedo utilizar TCP). También he creado una cabecera encima de UDP, que tiene diferentes atributos. Todos los atributos se convierten a bytes antes de enviarlos.

def encode_to_send(type, checksum, packet_number, data):
# data -> str
# type -> char
# packet_number -> int
# checksum -> int
if data is None:
data = “”
type_bytes = bytes(type, “iso-8859-2”)
checksum_bytes = checksum.to_bytes(4, “big”)
packet_number_bytes = packet_number.to_bytes(4, “big”)
if isinstance(data, str):
data_bytes = bytes(data, “iso-8859-2”)
else:
data_bytes = data
byte_all = type_bytes+checksum_bytes+packet_number_bytes+data_bytes
return byte_all

Aquí hay un ejemplo de la llamada:

data_to_send = encode_to_send(type, checksum, packet_number, msg)
s.sendto(data_to_send, (server_address, server_port))

El problema es que cuando envío estos bytes, el método integrado sendto() y la respuesta del servidor recvfrom() tardan demasiado tiempo.

Mis colegas también están trabajando en esta tarea y para ellos estos métodos se están ejecutando mucho más rápido que para mí. Como estoy usando PyCharm, también intenté ejecutar el perfilador para ver el consumo de tiempo de estos métodos y mis colegas también me enviaron sus perfiles para comparar.

¿Qué podría causar este comportamiento para estos métodos?

Snips de los archivos pstat:

Archivo pstat para mi programa

Archivo pstat para el programa de mi colega

Los métodos por encima de sendto() y recvfrom() están llamando a estos integrados o son campos de entrada, lo que explica por qué consumen tanto tiempo.

Estoy usando Python 3.9.7 y mi colega está ejecutando la versión 3.9.5. Estoy utilizando el sistema operativo Windows, sin embargo este programa también fue probado en Linux en una PC diferente. El comportamiento de estos métodos fue el mismo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que los métodos sendto() y recvfrom() tardan más tiempo en ejecutarse en su programa que en el programa de su colega. Esto podría deberse a algunos factores diferentes.

    En primer lugar, la versión de Python que está utilizando podría ser un factor. Usted está utilizando Python 3.9.7 y su colega está utilizando 3.9.5. Es posible que la versión más reciente de Python esté haciendo que los métodos tarden más tiempo en ejecutarse.

    En segundo lugar, el sistema operativo que está utilizando podría ser un factor. Usted está utilizando Windows, mientras que su colega está utilizando Linux. Es posible que los diferentes sistemas operativos estén haciendo que los métodos tarden más tiempo en ejecutarse.

    Por último, los métodos anteriores a sendto() y recvfrom() podrían ser un factor. Si estos métodos llaman a las funciones incorporadas o son campos de entrada, esto podría explicar por qué tardan más tiempo en ejecutarse.

    Es difícil determinar la causa exacta de la ejecución más lenta sin una investigación adicional. Puede considerar la posibilidad de realizar más pruebas para determinar la causa exacta.

Comments are closed.