Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Observación relacionada a atascamiento de procesos. #30

Open
rloverab opened this issue Aug 10, 2024 · 0 comments
Open

Observación relacionada a atascamiento de procesos. #30

rloverab opened this issue Aug 10, 2024 · 0 comments

Comments

@rloverab
Copy link

rloverab commented Aug 10, 2024

Saludos.

En el proyecto personal donde hago uso de esta librería, utilizo una misma conexión por websocket para realizar varias operaciones consecutivas. Es decir, lo que hago es abrir la conexión, usar varios métodos de la librería aprovechando esa conexión y al terminar cierro la conexión.

En mi caso todo funciona correctamente salvo las veces en la que de manera aleatoria se estanca. Estuve revisando el código y pude identificar en cual método ocurre el estancamiento. Es en el método send_ssid contenido en el archivo api.py.

Este es el método:

def send_ssid(self):
    self.wss_message = None
    if not global_value.SSID:
        return False
    self.ssid(global_value.SSID)
    while not self.wss_message:
        time.sleep(0.3)
    if not self.wss_message:
        return False
    return True

Si te fijas, la condición de repetición del bucle while es que el atributo wss_message sea NONE. Si el atributo wss_message deja de ser NONE se rompe el bucle y el algoritmo continua su ejecución.

Me he encontrado en situaciones donde el atributo wss_message nunca deja de ser NONE evitando que el bucle se rompa
provocando de este modo el estancamiento.

También está el detalle de que la sentencia contenida en la condicional if not self.wss_message nunca se ejecuta. La razóin por la que nunca se ejecuta es porque si wss_message nunca deja de ser NONE, el algoritmo se estanca y no alcanza a llegar a la condicional. Pero si wss_message deja de ser NONE la condición not self.wss_message es FALSE, evitando la ejecución de las sentencias contenidas en ella.

Para resolver el problema hice una modificación al método la cual hasta el momento me ha dado buenos resultados.

El método modificado:

def send_ssid(self):
    self.wss_message = None
    if not global_value.SSID:
        return False
    self.ssid(global_value.SSID)
    # while not self.wss_message:
    #     time.sleep(0.3)
    # if not self.wss_message:
    #     return False
    # return True
    for i in range(33):
        if self.wss_message:
            return True
        time.sleep(0.3)
    return False

Prescindí del bucle while y de la condicional y lo reemplacé por un bucle for el cual se repite 33 veces. Decidí que fueran 33 iteraciones para poder establecer un tiempo de espera cercano a los 10 segundos (tomando en cuenta el retardo de 0.3 segundos) antes de dejar de insistir en la espera de que el atributo wss_message reciba un valor.

Comparto esto como aporte para contribuir con el desarrollo de esta librería de la cual también soy usuario.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant