Spaces:
Sleeping
Sleeping
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} | |
) |