diff --git a/app.py b/app.py index 5923cc3..f845395 100755 --- a/app.py +++ b/app.py @@ -2995,6 +2995,7 @@ def scheduled_task_worker(): started_count = 0 skipped_count = 0 + task_threads = [] # 收集所有启动的任务线程 for account_id in account_ids: if user_id not in user_accounts: @@ -3019,6 +3020,7 @@ def scheduled_task_worker(): ) thread.start() active_tasks[account_id] = thread + task_threads.append(thread) started_count += 1 socketio.emit('account_update', account.to_dict(), room=f'user_{user_id}') @@ -3026,18 +3028,40 @@ def scheduled_task_worker(): # 更新最后执行时间 database.update_schedule_last_run(schedule_id) - # 更新执行日志 - execution_duration = int(time_mod.time() - execution_start_time) - database.update_schedule_execution_log( - log_id, - total_accounts=len(account_ids), - success_accounts=started_count, - failed_accounts=len(account_ids) - started_count, - duration_seconds=execution_duration, - status='completed' - ) - print(f"[用户定时任务] 已启动 {started_count} 个账号,跳过 {skipped_count} 个账号") + + # 启动监控线程,等待所有任务完成后更新日志 + def wait_and_update_log(threads, start_time, lid, total, success, sid): + for t in threads: + t.join() # 等待每个任务完成 + execution_duration = int(time_mod.time() - start_time) + database.update_schedule_execution_log( + lid, + total_accounts=total, + success_accounts=success, + failed_accounts=total - success, + duration_seconds=execution_duration, + status='completed' + ) + print(f"[用户定时任务] 任务#{sid}执行完成,耗时{execution_duration}秒") + + if task_threads: + monitor_thread = threading.Thread( + target=wait_and_update_log, + args=(task_threads, execution_start_time, log_id, len(account_ids), started_count, schedule_id), + daemon=True + ) + monitor_thread.start() + else: + # 没有启动任何任务,直接更新日志 + database.update_schedule_execution_log( + log_id, + total_accounts=len(account_ids), + success_accounts=0, + failed_accounts=len(account_ids), + duration_seconds=0, + status='completed' + ) if started_count == 0 and len(account_ids) > 0: print(f"[用户定时任务] ⚠️ 警告:所有账号都被跳过了!请检查user_accounts状态")