Spaces:
Runtime error
Runtime error
bug fix
Browse files
app.py
CHANGED
@@ -53,8 +53,9 @@ class Task:
|
|
53 |
self.client_ip = client_ip
|
54 |
self.is_processing = False
|
55 |
|
56 |
-
|
57 |
-
|
|
|
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
|
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'])
|