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.

Ipywidget con actualización periódica utilizando un hilo.

Estoy intentando grabar periódicamente el valor de un widget deslizante. He revisado el documento oficial sobre Widgets Asincrónicos. Pero en mi código, parece que todavía ocurre bloqueo.

import threading
import time
from ipywidgets import widgets

w = widgets.IntSlider()
out = widgets.Output()
def record():
    for i in range(10):
        time.sleep(1)
        with out:
            print(f"grabar {w.value}")

t = threading.Thread(target=record)

display(w,out)
t.start()
t.join()

Esperaba obtener la salida del valor del slider cada segundo mientras arrastro el slider. En cambio, solo imprime valores 0 durante el arrastre.

También intenté poner ambos procesos en hilos (y usar el método observe para el slider), pero tampoco funciona.

Entorno: Jupyter lab 3.2.1

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código proporcionado no es asíncrono y bloquea el hilo principal mientras se ejecuta la función de grabación. En su lugar, puedes utilizar la biblioteca asyncio para hacer que la función se ejecute de forma asíncrona sin bloquear el hilo principal. Aquí tienes un ejemplo de cómo modificar el código:

    import asyncio
    from ipywidgets import widgets
    
    w = widgets.IntSlider()
    out = widgets.Output()
    display(w, out)
    
    async def grabar():
        while True:
            with out:
                print(f"grabar {w.value}")
            await asyncio.sleep(1)
    
    asyncio.create_task(grabar())
    

    Este código utiliza un bucle infinito que imprime periódicamente el valor del slider, y la función asyncio.sleep le permite ceder el control a otras tareas durante el tiempo de espera. La función create_task inicia la rutina de grabación en segundo plano y permite que se ejecute indefinidamente. De esta manera, el código no bloquea el hilo principal y permite que el slider actualice su valor mientras se ejecuta la función de grabación.

Comments are closed.