Fix task status stuck at 'running': use new DB session in thread, add frontend auto-polling

This commit is contained in:
Yuzhiran Dev
2026-05-18 22:37:59 +08:00
parent 33766a396d
commit f427aea1b3
2 changed files with 37 additions and 17 deletions
+25 -16
View File
@@ -227,25 +227,34 @@ def run_creator_task(
from ..core.generator import run_creator
def _run():
from ..database import SessionLocal
from datetime import datetime, timezone
new_db = SessionLocal()
try:
result = run_creator(topic_id)
finished = datetime.now(timezone.utc)
task.status = "completed"
task.finished_at = finished
task.progress = 100
task.message = "创作完成"
task.result_data = result or {}
if task.started_at:
task.duration = int((finished - task.started_at).total_seconds())
db.commit()
new_task = new_db.query(ContentTask).filter(ContentTask.task_id == task_id).first()
if new_task:
finished = datetime.now(timezone.utc)
new_task.status = "completed"
new_task.finished_at = finished
new_task.progress = 100
new_task.message = "创作完成"
new_task.result_data = result or {}
if new_task.started_at:
new_task.duration = int((finished - new_task.started_at).total_seconds())
new_db.commit()
except Exception as e:
finished = datetime.now(timezone.utc)
task.status = "failed"
task.finished_at = finished
task.error_msg = str(e)
if task.started_at:
task.duration = int((finished - task.started_at).total_seconds())
db.commit()
new_task = new_db.query(ContentTask).filter(ContentTask.task_id == task_id).first()
if new_task:
finished = datetime.now(timezone.utc)
new_task.status = "failed"
new_task.finished_at = finished
new_task.error_msg = str(e)
if new_task.started_at:
new_task.duration = int((finished - new_task.started_at).total_seconds())
new_db.commit()
finally:
new_db.close()
thread = threading.Thread(target=_run)
thread.start()