Spaces:
Sleeping
Sleeping
朱东升
commited on
Commit
·
6517c54
1
Parent(s):
6f98bd6
update41
Browse files
app.py
CHANGED
@@ -31,14 +31,16 @@ task_status = {}
|
|
31 |
task_history = []
|
32 |
# Lock for shared resources
|
33 |
lock = threading.Lock()
|
34 |
-
# Number of worker threads
|
35 |
-
worker_threads =
|
36 |
# Flag for running background threads
|
37 |
running = True
|
38 |
# Mapping from task type to processing time
|
39 |
task_type_times = {}
|
40 |
# Currently processing tasks counter
|
41 |
processing_count = 0
|
|
|
|
|
42 |
|
43 |
def queue_processor():
|
44 |
"""Process tasks in the queue"""
|
@@ -46,10 +48,10 @@ def queue_processor():
|
|
46 |
|
47 |
while running:
|
48 |
try:
|
49 |
-
# Only process if we
|
50 |
with lock:
|
51 |
if processing_count >= worker_threads:
|
52 |
-
# Already
|
53 |
time.sleep(0.5)
|
54 |
continue
|
55 |
|
@@ -184,9 +186,8 @@ def evaluate(input_data):
|
|
184 |
|
185 |
results = []
|
186 |
|
187 |
-
# Use
|
188 |
-
|
189 |
-
max_workers = max(1, min(multiprocessing.cpu_count() // 2, 4))
|
190 |
|
191 |
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
|
192 |
future_to_item = {executor.submit(evaluate_single_case, item): item for item in input_data}
|
@@ -449,39 +450,50 @@ def ui_get_queue_info():
|
|
449 |
</tr>
|
450 |
"""
|
451 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
return f"""
|
453 |
<div class="dashboard">
|
454 |
<div class="queue-info-card main-card">
|
455 |
-
<h3 class="card-title"
|
456 |
<div class="queue-stats">
|
457 |
<div class="stat-item">
|
458 |
<div class="stat-value">{queue_info['waiting_tasks']}</div>
|
459 |
-
<div class="stat-label"
|
460 |
</div>
|
461 |
<div class="stat-item">
|
462 |
<div class="stat-value">{queue_info['active_tasks']}</div>
|
463 |
-
<div class="stat-label"
|
464 |
</div>
|
465 |
<div class="stat-item">
|
466 |
<div class="stat-value">{queue_info['worker_threads']}</div>
|
467 |
-
<div class="stat-label"
|
468 |
</div>
|
469 |
</div>
|
470 |
|
471 |
<div class="wait-time">
|
472 |
-
<p><b
|
473 |
-
|
|
|
|
|
474 |
</div>
|
475 |
</div>
|
476 |
|
477 |
<div class="queue-info-card history-card">
|
478 |
-
<h3 class="card-title"
|
479 |
<table class="recent-tasks">
|
480 |
<thead>
|
481 |
<tr>
|
482 |
-
<th
|
483 |
-
<th
|
484 |
-
<th
|
485 |
</tr>
|
486 |
</thead>
|
487 |
<tbody>
|
@@ -661,14 +673,14 @@ launch_workers()
|
|
661 |
|
662 |
# Create Gradio interface
|
663 |
with gr.Blocks(css=custom_css) as demo:
|
664 |
-
gr.Markdown("#
|
665 |
-
gr.Markdown("
|
666 |
|
667 |
with gr.Row():
|
668 |
with gr.Column(scale=3):
|
669 |
# Queue status info card
|
670 |
queue_info_html = gr.HTML()
|
671 |
-
refresh_queue_btn = gr.Button("
|
672 |
|
673 |
# Hidden API interface components
|
674 |
with gr.Row(visible=False):
|
|
|
31 |
task_history = []
|
32 |
# Lock for shared resources
|
33 |
lock = threading.Lock()
|
34 |
+
# Number of worker threads - set to 1 to process one task at a time
|
35 |
+
worker_threads = 1 # 只处理一个任务,避免资源竞争
|
36 |
# Flag for running background threads
|
37 |
running = True
|
38 |
# Mapping from task type to processing time
|
39 |
task_type_times = {}
|
40 |
# Currently processing tasks counter
|
41 |
processing_count = 0
|
42 |
+
# Available CPU cores for task processing
|
43 |
+
available_cores = multiprocessing.cpu_count()
|
44 |
|
45 |
def queue_processor():
|
46 |
"""Process tasks in the queue"""
|
|
|
48 |
|
49 |
while running:
|
50 |
try:
|
51 |
+
# Only process if we're not already processing a task
|
52 |
with lock:
|
53 |
if processing_count >= worker_threads:
|
54 |
+
# Already processing a task, wait and try again
|
55 |
time.sleep(0.5)
|
56 |
continue
|
57 |
|
|
|
186 |
|
187 |
results = []
|
188 |
|
189 |
+
# Use all available cores for this single task but with a reasonable cap
|
190 |
+
max_workers = max(1, min(available_cores // 2, 8))
|
|
|
191 |
|
192 |
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
|
193 |
future_to_item = {executor.submit(evaluate_single_case, item): item for item in input_data}
|
|
|
450 |
</tr>
|
451 |
"""
|
452 |
|
453 |
+
# 增加更多详细信息到UI
|
454 |
+
queue_details = ""
|
455 |
+
if queue_info['waiting_tasks'] > 0:
|
456 |
+
queue_details = f"<p>当前有 {queue_info['waiting_tasks']} 个任务在等待队列中,预计等待时间:{format_time(queue_info['estimated_wait'])}</p>"
|
457 |
+
|
458 |
+
processing_details = ""
|
459 |
+
if queue_info['active_tasks'] > 0:
|
460 |
+
processing_details = f"<p>当前有 {queue_info['active_tasks']} 个任务正在处理中</p>"
|
461 |
+
|
462 |
return f"""
|
463 |
<div class="dashboard">
|
464 |
<div class="queue-info-card main-card">
|
465 |
+
<h3 class="card-title">队列状态监控</h3>
|
466 |
<div class="queue-stats">
|
467 |
<div class="stat-item">
|
468 |
<div class="stat-value">{queue_info['waiting_tasks']}</div>
|
469 |
+
<div class="stat-label">等待中</div>
|
470 |
</div>
|
471 |
<div class="stat-item">
|
472 |
<div class="stat-value">{queue_info['active_tasks']}</div>
|
473 |
+
<div class="stat-label">处理中</div>
|
474 |
</div>
|
475 |
<div class="stat-item">
|
476 |
<div class="stat-value">{queue_info['worker_threads']}</div>
|
477 |
+
<div class="stat-label">工作线程</div>
|
478 |
</div>
|
479 |
</div>
|
480 |
|
481 |
<div class="wait-time">
|
482 |
+
<p><b>预计等待时间:</b> {format_time(queue_info['estimated_wait'])}</p>
|
483 |
+
{queue_details}
|
484 |
+
{processing_details}
|
485 |
+
<p class="last-update"><small>最后更新时间: {datetime.now().strftime('%H:%M:%S')}</small></p>
|
486 |
</div>
|
487 |
</div>
|
488 |
|
489 |
<div class="queue-info-card history-card">
|
490 |
+
<h3 class="card-title">最近处理的任务</h3>
|
491 |
<table class="recent-tasks">
|
492 |
<thead>
|
493 |
<tr>
|
494 |
+
<th>任务ID</th>
|
495 |
+
<th>请求时间</th>
|
496 |
+
<th>处理时间</th>
|
497 |
</tr>
|
498 |
</thead>
|
499 |
<tbody>
|
|
|
673 |
|
674 |
# Create Gradio interface
|
675 |
with gr.Blocks(css=custom_css) as demo:
|
676 |
+
gr.Markdown("# 代码评估服务")
|
677 |
+
gr.Markdown("支持多种编程语言的代码评估服务,使用队列机制处理请求")
|
678 |
|
679 |
with gr.Row():
|
680 |
with gr.Column(scale=3):
|
681 |
# Queue status info card
|
682 |
queue_info_html = gr.HTML()
|
683 |
+
refresh_queue_btn = gr.Button("刷新队列状态", variant="primary")
|
684 |
|
685 |
# Hidden API interface components
|
686 |
with gr.Row(visible=False):
|