Spaces:
Sleeping
Sleeping
朱东升
commited on
Commit
·
7f83e08
1
Parent(s):
5922648
update7
Browse files
app.py
CHANGED
@@ -20,13 +20,18 @@ if current_dir not in sys.path:
|
|
20 |
if src_dir not in sys.path:
|
21 |
sys.path.append(src_dir)
|
22 |
|
23 |
-
#
|
24 |
task_queue = queue.Queue()
|
25 |
task_results = {}
|
26 |
active_tasks = {}
|
27 |
completed_tasks = []
|
28 |
task_id_counter = 0
|
29 |
task_lock = threading.Lock()
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
def get_next_task_id():
|
32 |
global task_id_counter
|
@@ -61,6 +66,9 @@ def submit_task(input_data):
|
|
61 |
active_tasks[task_id] = task_info
|
62 |
task_queue.put(task_info)
|
63 |
|
|
|
|
|
|
|
64 |
# 如果这是第一个任务,启动处理线程
|
65 |
if len(active_tasks) == 1:
|
66 |
threading.Thread(target=process_task_queue, daemon=True).start()
|
@@ -108,6 +116,7 @@ def process_task_queue():
|
|
108 |
# 更新任务状态
|
109 |
with task_lock:
|
110 |
active_tasks[task_id]["status"] = "processing"
|
|
|
111 |
|
112 |
# 处理任务
|
113 |
result = evaluate(task_info["data"])
|
@@ -125,11 +134,26 @@ def process_task_queue():
|
|
125 |
# 保留最近的20个已完成任务
|
126 |
if len(completed_tasks) > 20:
|
127 |
completed_tasks.pop(0)
|
|
|
|
|
128 |
|
129 |
task_queue.task_done()
|
130 |
|
131 |
except Exception as e:
|
132 |
print(f"Error processing task queue: {str(e)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
time.sleep(1)
|
134 |
|
135 |
def evaluate(input_data):
|
@@ -380,6 +404,13 @@ def refresh_ui():
|
|
380 |
"""定期刷新UI函数"""
|
381 |
return render_queue_status()
|
382 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
383 |
def submit_json_data(json_data):
|
384 |
"""提交JSON数据处理接口"""
|
385 |
try:
|
@@ -390,9 +421,12 @@ def submit_json_data(json_data):
|
|
390 |
data = json_data
|
391 |
|
392 |
result = submit_task(data)
|
393 |
-
|
|
|
|
|
|
|
394 |
except Exception as e:
|
395 |
-
return json.dumps({"status": "error", "message": str(e)}, ensure_ascii=False, indent=2)
|
396 |
|
397 |
# 创建Gradio接口
|
398 |
with gr.Blocks(title="代码评估服务", theme=gr.themes.Soft()) as demo:
|
@@ -405,10 +439,14 @@ with gr.Blocks(title="代码评估服务", theme=gr.themes.Soft()) as demo:
|
|
405 |
status_html = gr.HTML(render_queue_status)
|
406 |
refresh_button = gr.Button("刷新状态")
|
407 |
refresh_button.click(fn=refresh_ui, outputs=status_html)
|
408 |
-
|
|
|
|
|
|
|
|
|
409 |
gr.HTML("""
|
410 |
<script>
|
411 |
-
// 使用JavaScript
|
412 |
function setupAutoRefresh() {
|
413 |
const refreshInterval = 5000; // 5秒
|
414 |
|
@@ -447,7 +485,7 @@ with gr.Blocks(title="代码评估服务", theme=gr.themes.Soft()) as demo:
|
|
447 |
with gr.Column():
|
448 |
result_output = gr.Textbox(label="提交结果", lines=5)
|
449 |
|
450 |
-
submit_button.click(fn=submit_json_data, inputs=json_input, outputs=result_output)
|
451 |
|
452 |
with gr.Tab("API文档"):
|
453 |
gr.Markdown("""
|
|
|
20 |
if src_dir not in sys.path:
|
21 |
sys.path.append(src_dir)
|
22 |
|
23 |
+
# 添加全局任务队列和任务状态跟踪
|
24 |
task_queue = queue.Queue()
|
25 |
task_results = {}
|
26 |
active_tasks = {}
|
27 |
completed_tasks = []
|
28 |
task_id_counter = 0
|
29 |
task_lock = threading.Lock()
|
30 |
+
update_event = threading.Event() # 通知UI需要刷新
|
31 |
+
|
32 |
+
def trigger_ui_update():
|
33 |
+
"""触发UI更新事件"""
|
34 |
+
update_event.set()
|
35 |
|
36 |
def get_next_task_id():
|
37 |
global task_id_counter
|
|
|
66 |
active_tasks[task_id] = task_info
|
67 |
task_queue.put(task_info)
|
68 |
|
69 |
+
# 触发UI更新
|
70 |
+
trigger_ui_update()
|
71 |
+
|
72 |
# 如果这是第一个任务,启动处理线程
|
73 |
if len(active_tasks) == 1:
|
74 |
threading.Thread(target=process_task_queue, daemon=True).start()
|
|
|
116 |
# 更新任务状态
|
117 |
with task_lock:
|
118 |
active_tasks[task_id]["status"] = "processing"
|
119 |
+
trigger_ui_update() # 状态变更为处理中时更新UI
|
120 |
|
121 |
# 处理任务
|
122 |
result = evaluate(task_info["data"])
|
|
|
134 |
# 保留最近的20个已完成任务
|
135 |
if len(completed_tasks) > 20:
|
136 |
completed_tasks.pop(0)
|
137 |
+
|
138 |
+
trigger_ui_update() # 任务完成时更新UI
|
139 |
|
140 |
task_queue.task_done()
|
141 |
|
142 |
except Exception as e:
|
143 |
print(f"Error processing task queue: {str(e)}")
|
144 |
+
# 出错时也触发UI更新
|
145 |
+
with task_lock:
|
146 |
+
if task_id in active_tasks:
|
147 |
+
active_tasks[task_id]["status"] = "error"
|
148 |
+
active_tasks[task_id]["error"] = str(e)
|
149 |
+
active_tasks[task_id]["completed_at"] = datetime.now()
|
150 |
+
# 将任务移至已完成列表
|
151 |
+
completed_tasks.append(active_tasks[task_id])
|
152 |
+
del active_tasks[task_id]
|
153 |
+
# 保留最近的20个已完成任务
|
154 |
+
if len(completed_tasks) > 20:
|
155 |
+
completed_tasks.pop(0)
|
156 |
+
trigger_ui_update()
|
157 |
time.sleep(1)
|
158 |
|
159 |
def evaluate(input_data):
|
|
|
404 |
"""定期刷新UI函数"""
|
405 |
return render_queue_status()
|
406 |
|
407 |
+
def check_for_updates():
|
408 |
+
"""检查是否有UI更新请求"""
|
409 |
+
if update_event.is_set():
|
410 |
+
update_event.clear()
|
411 |
+
return render_queue_status()
|
412 |
+
return gr.update()
|
413 |
+
|
414 |
def submit_json_data(json_data):
|
415 |
"""提交JSON数据处理接口"""
|
416 |
try:
|
|
|
421 |
data = json_data
|
422 |
|
423 |
result = submit_task(data)
|
424 |
+
response = json.dumps(result, ensure_ascii=False, indent=2)
|
425 |
+
|
426 |
+
# 返回任务提交结果和最新的队列状态
|
427 |
+
return response, render_queue_status()
|
428 |
except Exception as e:
|
429 |
+
return json.dumps({"status": "error", "message": str(e)}, ensure_ascii=False, indent=2), render_queue_status()
|
430 |
|
431 |
# 创建Gradio接口
|
432 |
with gr.Blocks(title="代码评估服务", theme=gr.themes.Soft()) as demo:
|
|
|
439 |
status_html = gr.HTML(render_queue_status)
|
440 |
refresh_button = gr.Button("刷新状态")
|
441 |
refresh_button.click(fn=refresh_ui, outputs=status_html)
|
442 |
+
|
443 |
+
# 设置自动刷新 - 使用Gradio内置的轮询功能
|
444 |
+
demo.load(check_for_updates, None, status_html, every=1)
|
445 |
+
|
446 |
+
# JavaScript刷新功能保留作为备份
|
447 |
gr.HTML("""
|
448 |
<script>
|
449 |
+
// 使用JavaScript作为备份的自动刷新
|
450 |
function setupAutoRefresh() {
|
451 |
const refreshInterval = 5000; // 5秒
|
452 |
|
|
|
485 |
with gr.Column():
|
486 |
result_output = gr.Textbox(label="提交结果", lines=5)
|
487 |
|
488 |
+
submit_button.click(fn=submit_json_data, inputs=json_input, outputs=[result_output, status_html])
|
489 |
|
490 |
with gr.Tab("API文档"):
|
491 |
gr.Markdown("""
|