Fix task status stuck at 'running': use new DB session in thread, add frontend auto-polling
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user