Spaces:
Runtime error
Runtime error
bug fix
Browse files
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
from flask import Flask, request, render_template, send_file, jsonify, send_from_directory
|
2 |
-
from flask_socketio import SocketIO,
|
3 |
from flask_cors import CORS
|
4 |
from flask_limiter import Limiter
|
5 |
from flask_limiter.util import get_remote_address
|
@@ -54,11 +54,12 @@ class Task:
|
|
54 |
self.is_processing = False
|
55 |
|
56 |
# キューの状態を通知
|
57 |
-
def update_queue_status(message
|
58 |
-
socketio.emit('queue_update', {'active_tasks': len(active_tasks), 'message': message}
|
59 |
|
60 |
def process_task(task):
|
61 |
try:
|
|
|
62 |
task.is_processing = True
|
63 |
# ファイルデータをPIL Imageに変換
|
64 |
image = Image.open(io.BytesIO(task.file_data))
|
@@ -79,10 +80,10 @@ def process_task(task):
|
|
79 |
'task_id': task.task_id,
|
80 |
'sotai_image': sotai_image,
|
81 |
'sketch_image': sketch_image
|
82 |
-
},
|
83 |
except Exception as e:
|
84 |
if not task.cancel_flag:
|
85 |
-
socketio.emit('task_error', {'task_id': task.task_id, 'error': str(e)},
|
86 |
finally:
|
87 |
task.is_processing = False
|
88 |
if task.task_id in active_tasks:
|
@@ -115,16 +116,17 @@ threading.Thread(target=worker, daemon=True).start()
|
|
115 |
# グローバル変数を使用して接続数とタスク数を管理
|
116 |
connected_clients = 0
|
117 |
tasks_per_client = {}
|
118 |
-
|
119 |
@socketio.on('connect')
|
120 |
def handle_connect(auth):
|
|
|
|
|
121 |
global connected_clients
|
122 |
-
if connected_clients > 100:
|
123 |
-
return False # 接続を拒否
|
124 |
connected_clients += 1
|
125 |
|
126 |
@socketio.on('disconnect')
|
127 |
def handle_disconnect():
|
|
|
|
|
128 |
global connected_clients
|
129 |
connected_clients -= 1
|
130 |
# キャンセル処理:接続が切断された場合、そのクライアントに関連するタスクをキャンセル。ただし、1番目で処理中のタスクはキャンセルしない
|
@@ -146,6 +148,7 @@ def submit_task():
|
|
146 |
|
147 |
# クライアントIPアドレスを取得
|
148 |
client_ip = get_remote_address()
|
|
|
149 |
|
150 |
# 同一IPからの同時タスク数を制限
|
151 |
if tasks_per_client.get(client_ip, 0) >= 2:
|
@@ -171,6 +174,8 @@ def submit_task():
|
|
171 |
|
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})
|
@@ -192,7 +197,7 @@ def cancel_task(task_id):
|
|
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'
|
196 |
return jsonify({'message': 'Task cancellation requested'})
|
197 |
else:
|
198 |
for task in list(task_queue.queue):
|
|
|
1 |
from flask import Flask, request, render_template, send_file, jsonify, send_from_directory
|
2 |
+
from flask_socketio import SocketIO, join_room, leave_room, close_room, rooms, disconnect
|
3 |
from flask_cors import CORS
|
4 |
from flask_limiter import Limiter
|
5 |
from flask_limiter.util import get_remote_address
|
|
|
54 |
self.is_processing = False
|
55 |
|
56 |
# キューの状態を通知
|
57 |
+
def update_queue_status(message):
|
58 |
+
socketio.emit('queue_update', {'active_tasks': len(active_tasks), 'message': message})
|
59 |
|
60 |
def process_task(task):
|
61 |
try:
|
62 |
+
client_id = request.sid
|
63 |
task.is_processing = True
|
64 |
# ファイルデータをPIL Imageに変換
|
65 |
image = Image.open(io.BytesIO(task.file_data))
|
|
|
80 |
'task_id': task.task_id,
|
81 |
'sotai_image': sotai_image,
|
82 |
'sketch_image': sketch_image
|
83 |
+
}, to=client_id)
|
84 |
except Exception as e:
|
85 |
if not task.cancel_flag:
|
86 |
+
socketio.emit('task_error', {'task_id': task.task_id, 'error': str(e)}, to=client_id)
|
87 |
finally:
|
88 |
task.is_processing = False
|
89 |
if task.task_id in active_tasks:
|
|
|
116 |
# グローバル変数を使用して接続数とタスク数を管理
|
117 |
connected_clients = 0
|
118 |
tasks_per_client = {}
|
|
|
119 |
@socketio.on('connect')
|
120 |
def handle_connect(auth):
|
121 |
+
client_id = request.sid # クライアントIDを取得
|
122 |
+
join_room(client_id) # クライアントを自身のルームに入れる
|
123 |
global connected_clients
|
|
|
|
|
124 |
connected_clients += 1
|
125 |
|
126 |
@socketio.on('disconnect')
|
127 |
def handle_disconnect():
|
128 |
+
client_id = request.sid # クライアントIDを取得
|
129 |
+
leave_room(client_id) # クライアントをルームから出す
|
130 |
global connected_clients
|
131 |
connected_clients -= 1
|
132 |
# キャンセル処理:接続が切断された場合、そのクライアントに関連するタスクをキャンセル。ただし、1番目で処理中のタスクはキャンセルしない
|
|
|
148 |
|
149 |
# クライアントIPアドレスを取得
|
150 |
client_ip = get_remote_address()
|
151 |
+
client_id = request.sid # クライアントIDを取得
|
152 |
|
153 |
# 同一IPからの同時タスク数を制限
|
154 |
if tasks_per_client.get(client_ip, 0) >= 2:
|
|
|
174 |
|
175 |
# 同一IPからのタスク数をインクリメント
|
176 |
tasks_per_client[client_ip] = tasks_per_client.get(client_ip, 0) + 1
|
177 |
+
|
178 |
+
update_queue_status('Task submitted')
|
179 |
|
180 |
queue_size = task_queue.qsize()
|
181 |
return jsonify({'task_id': task_id, 'queue_size': queue_size})
|
|
|
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):
|