Spaces:
Running
Running
| import os | |
| import asyncio | |
| from concurrent.futures import ThreadPoolExecutor | |
| import gradio as gr | |
| # Configuraci贸n CR脥TICA para evitar timeouts | |
| GRADIO_TIMEOUT = 6000 # 10 minutos (en segundos) | |
| MAX_VIDEO_DURATION = 1000 # 2 minutos (evita procesos eternos) | |
| async def crear_video_profesional(prompt, custom_script, voz_index, musica=None): | |
| try: | |
| # 1. Simulamos un proceso largo (隆esto es lo que causa el timeout!) | |
| # Reemplaza esto con tu l贸gica real de generaci贸n | |
| await asyncio.sleep(30) # Solo para prueba | |
| # 2. Devuelve un video de prueba (eliminar en producci贸n) | |
| return "video_prueba.mp4" | |
| except Exception as e: | |
| print(f"ERROR: {str(e)}") | |
| return None | |
| # 馃憞 **Soluci贸n M谩gica**: Ejecuci贸n en hilos separados | |
| def run_async_with_timeout(prompt, script, voz_index, musica=None): | |
| with ThreadPoolExecutor() as executor: | |
| future = executor.submit( | |
| lambda: asyncio.run(crear_video_profesional(prompt, script, voz_index, musica)) | |
| ) | |
| return future.result(timeout=GRADIO_TIMEOUT) | |
| # Interfaz Minimalista (para enfocarnos en el timeout) | |
| with gr.Blocks() as app: | |
| with gr.Row(): | |
| prompt = gr.Textbox(label="Tema") | |
| btn = gr.Button("Generar") | |
| output = gr.Video() | |
| btn.click( | |
| fn=run_async_with_timeout, # 馃憟 Usamos el wrapper anti-timeout | |
| inputs=[prompt, gr.Textbox(visible=False), gr.Number(visible=False)], | |
| outputs=output | |
| ) | |
| if __name__ == "__main__": | |
| app.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| # 鈿狅笍 Configuraci贸n CLAVE para el timeout | |
| app_kwargs={"timeout": GRADIO_TIMEOUT} | |
| ) |