朱东升 commited on
Commit
6517c54
·
1 Parent(s): 6f98bd6
Files changed (1) hide show
  1. app.py +32 -20
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 = max(1, multiprocessing.cpu_count() // 2) # Using half the available cores for better stability
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 haven't reached worker thread limit
50
  with lock:
51
  if processing_count >= worker_threads:
52
- # Already at max capacity, wait and try again
53
  time.sleep(0.5)
54
  continue
55
 
@@ -184,9 +186,8 @@ def evaluate(input_data):
184
 
185
  results = []
186
 
187
- # Use a moderate number of workers for all language tests to ensure stability
188
- # This prevents resource contention regardless of language
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">Queue Status Monitor</h3>
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">Waiting</div>
460
  </div>
461
  <div class="stat-item">
462
  <div class="stat-value">{queue_info['active_tasks']}</div>
463
- <div class="stat-label">Processing</div>
464
  </div>
465
  <div class="stat-item">
466
  <div class="stat-value">{queue_info['worker_threads']}</div>
467
- <div class="stat-label">Worker Threads</div>
468
  </div>
469
  </div>
470
 
471
  <div class="wait-time">
472
- <p><b>Current Estimated Wait Time:</b> {format_time(queue_info['estimated_wait'])}</p>
473
- <p class="last-update"><small>Last update: {datetime.now().strftime('%H:%M:%S')}</small></p>
 
 
474
  </div>
475
  </div>
476
 
477
  <div class="queue-info-card history-card">
478
- <h3 class="card-title">Recently Processed Tasks</h3>
479
  <table class="recent-tasks">
480
  <thead>
481
  <tr>
482
- <th>Task ID</th>
483
- <th>Request Time</th>
484
- <th>Processing Time</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("# Code Evaluation Service")
665
- gr.Markdown("Code evaluation service supporting multiple programming languages, using queue mechanism to process requests")
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("Refresh Queue Status", variant="primary")
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):