yeq6x commited on
Commit
db52736
·
1 Parent(s): f7c22cc
Files changed (1) hide show
  1. app.py +7 -12
app.py CHANGED
@@ -53,8 +53,9 @@ class Task:
53
  self.client_ip = client_ip
54
  self.is_processing = False
55
 
56
- def update_queue_status(message=None):
57
- socketio.emit('queue_update', {'active_tasks': len(active_tasks), 'message': message})
 
58
 
59
  def process_task(task):
60
  try:
@@ -78,10 +79,10 @@ def process_task(task):
78
  'task_id': task.task_id,
79
  'sotai_image': sotai_image,
80
  'sketch_image': sketch_image
81
- })
82
  except Exception as e:
83
  if not task.cancel_flag:
84
- socketio.emit('task_error', {'task_id': task.task_id, 'error': str(e)})
85
  finally:
86
  task.is_processing = False
87
  if task.task_id in active_tasks:
@@ -102,7 +103,6 @@ def worker():
102
  if task.task_id in active_tasks:
103
  future = executor.submit(process_task, task)
104
  task_futures[task.task_id] = future
105
- update_queue_status(f'Task processing: {task.task_id}')
106
  except Exception as e:
107
  print(f"Worker error: {str(e)}")
108
  finally:
@@ -122,7 +122,6 @@ def handle_connect(auth):
122
  if connected_clients > 100:
123
  return False # 接続を拒否
124
  connected_clients += 1
125
- emit('queue_update', {'active_tasks': len(active_tasks), 'active_task_order': None})
126
 
127
  @socketio.on('disconnect')
128
  def handle_disconnect():
@@ -138,8 +137,6 @@ def handle_disconnect():
138
  del task_futures[task_id]
139
  del active_tasks[task_id]
140
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) - 1
141
-
142
- emit('queue_update', {'active_tasks': len(active_tasks)})
143
 
144
  @app.route('/submit_task', methods=['POST'])
145
  @limiter.limit("10 per minute") # 1分間に10回までのリクエストに制限
@@ -175,8 +172,6 @@ def submit_task():
175
  # 同一IPからのタスク数をインクリメント
176
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) + 1
177
 
178
- update_queue_status(f'Task submitted: {task_id}')
179
-
180
  queue_size = task_queue.qsize()
181
  return jsonify({'task_id': task_id, 'queue_size': queue_size})
182
 
@@ -197,7 +192,7 @@ def cancel_task(task_id):
197
  del active_tasks[task_id]
198
  # タスク数をデクリメント
199
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) - 1
200
- update_queue_status('Task cancelled')
201
  return jsonify({'message': 'Task cancellation requested'})
202
  else:
203
  for task in list(task_queue.queue):
@@ -217,7 +212,7 @@ def task_status(task_id):
217
 
218
  def get_active_task_order(task_id):
219
  non_processing_tasks = [tid for tid, task in active_tasks.items() if not task.is_processing]
220
- return non_processing_tasks.index(task_id) if task_id in non_processing_tasks else None
221
 
222
  # get_task_orderイベントハンドラー
223
  @app.route('/get_task_order/<task_id>', methods=['GET'])
 
53
  self.client_ip = client_ip
54
  self.is_processing = False
55
 
56
+ # キューの状態を通知
57
+ def update_queue_status(message=None, client_ip=None):
58
+ socketio.emit('queue_update', {'active_tasks': len(active_tasks), 'message': message}, room=client_ip)
59
 
60
  def process_task(task):
61
  try:
 
79
  'task_id': task.task_id,
80
  'sotai_image': sotai_image,
81
  'sketch_image': sketch_image
82
+ }, room=task.client_ip)
83
  except Exception as e:
84
  if not task.cancel_flag:
85
+ socketio.emit('task_error', {'task_id': task.task_id, 'error': str(e)}, room=task.client_ip)
86
  finally:
87
  task.is_processing = False
88
  if task.task_id in active_tasks:
 
103
  if task.task_id in active_tasks:
104
  future = executor.submit(process_task, task)
105
  task_futures[task.task_id] = future
 
106
  except Exception as e:
107
  print(f"Worker error: {str(e)}")
108
  finally:
 
122
  if connected_clients > 100:
123
  return False # 接続を拒否
124
  connected_clients += 1
 
125
 
126
  @socketio.on('disconnect')
127
  def handle_disconnect():
 
137
  del task_futures[task_id]
138
  del active_tasks[task_id]
139
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) - 1
 
 
140
 
141
  @app.route('/submit_task', methods=['POST'])
142
  @limiter.limit("10 per minute") # 1分間に10回までのリクエストに制限
 
172
  # 同一IPからのタスク数をインクリメント
173
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) + 1
174
 
 
 
175
  queue_size = task_queue.qsize()
176
  return jsonify({'task_id': task_id, 'queue_size': queue_size})
177
 
 
192
  del active_tasks[task_id]
193
  # タスク数をデクリメント
194
  tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) - 1
195
+ update_queue_status('Task cancelled', client_ip)
196
  return jsonify({'message': 'Task cancellation requested'})
197
  else:
198
  for task in list(task_queue.queue):
 
212
 
213
  def get_active_task_order(task_id):
214
  non_processing_tasks = [tid for tid, task in active_tasks.items() if not task.is_processing]
215
+ return non_processing_tasks.index(task_id) if task_id in non_processing_tasks else 0
216
 
217
  # get_task_orderイベントハンドラー
218
  @app.route('/get_task_order/<task_id>', methods=['GET'])