Spaces:
Sleeping
Sleeping
File size: 1,708 Bytes
43fcbe8 cbfaa69 40c7de1 cbfaa69 fa201eb cbfaa69 77c11ae fa201eb cbfaa69 720c3d5 c9d2e08 cbfaa69 77c11ae cbfaa69 99b44b3 8337d0b cbfaa69 d5141b3 9e5ee0a d7f3a60 07b3b3d cbfaa69 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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}
) |