修复jmidjourney流式数据没有实时推送的问题

This commit is contained in:
jingrow 2026-04-16 15:57:26 +08:00
parent 539b0a3725
commit 3b2b4da894
2 changed files with 14 additions and 2 deletions

View File

@ -42,5 +42,9 @@ async def ve_generate_image(data: dict, request: Request):
return StreamingResponse(
generate(),
media_type="application/x-ndjson",
headers={"X-Content-Type-Options": "nosniff"}
headers={
"Cache-Control": "no-cache",
"X-Accel-Buffering": "no",
"X-Content-Type-Options": "nosniff"
}
)

View File

@ -335,6 +335,7 @@ class MidjourneyService:
"status": "error",
"message": "未配置 VectorEngine Token"
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
return
# 1. 提交任务
@ -353,6 +354,7 @@ class MidjourneyService:
"status": "error",
"message": submit_result.get("message", "提交任务失败未获取到任务ID")
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
return
logger.info(f"VectorEngine 任务已提交任务ID: {task_id}")
@ -360,6 +362,7 @@ class MidjourneyService:
"status": "submitted",
"task_id": task_id
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
# 2. 轮询任务状态
polling_count = 0
@ -395,6 +398,7 @@ class MidjourneyService:
"progress": progress_val,
"task_id": task_id
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
# 检查任务完成状态
if status == "SUCCESS":
@ -420,6 +424,7 @@ class MidjourneyService:
logger.error(f"分割图像失败: {str(e)}")
yield response
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
return
elif status in ("FAILURE", "FAILED"):
@ -429,6 +434,7 @@ class MidjourneyService:
"message": fail_reason,
"task_id": task_id
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
return
elif status == "CANCELLED":
@ -437,6 +443,7 @@ class MidjourneyService:
"message": "任务已取消",
"task_id": task_id
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送
return
# 其他状态(如 IN_PROGRESS, SUBMITTED继续轮询
@ -448,3 +455,4 @@ class MidjourneyService:
"message": f"任务超时,已轮询 {settings.vectorengine_max_polling_attempts}",
"task_id": task_id
}
await asyncio.sleep(0) # 让出控制权,确保数据立即推送