1313import time
1414from typing import Dict , Any
1515
16- # Use a Manager so queues and shared state can be passed across the worker process.
17- _multiprocessing_manager = None
18- input_queue = None
19- gui_queue = None
20- wait_flag = None
16+ if multiprocessing .current_process ().name == 'MainProcess' :
17+ input_queue = multiprocessing .Queue ()
18+ gui_queue = multiprocessing .Queue ()
19+ wait_flag = multiprocessing .Value ('b' , False )
20+ else :
21+ input_queue = None
22+ gui_queue = None
23+ wait_flag = None
2124
2225current_process = None
2326current_process_lock = threading .Lock ()
@@ -37,15 +40,7 @@ def _global_log_worker():
3740 pass
3841 gevent .sleep (0.05 )
3942
40- def _init_multiprocessing ():
41- global _multiprocessing_manager , input_queue , gui_queue , wait_flag
42- if _multiprocessing_manager is None :
43- _multiprocessing_manager = multiprocessing .Manager ()
44- input_queue = _multiprocessing_manager .Queue ()
45- gui_queue = _multiprocessing_manager .Queue ()
46- wait_flag = _multiprocessing_manager .Value ('b' , False )
47- eel .spawn (_global_log_worker )
48-
43+ # Iniciamos el worker del log solo en el proceso principal
4944if multiprocessing .current_process ().name == 'MainProcess' :
5045 eel .spawn (_global_log_worker )
5146
@@ -143,10 +138,9 @@ def kill_execution() -> bool:
143138# EJECUTOR PRINCIPAL
144139def execute_user_code (code : str , timeout : int = 5 ) -> Dict [str , Any ]:
145140 global current_process
146- _init_multiprocessing ()
147141 result = {'success' : False , 'output' : '' , 'error' : '' }
148142
149- if input_queue is None or gui_queue is None or wait_flag is None or _multiprocessing_manager is None :
143+ if input_queue is None or gui_queue is None or wait_flag is None :
150144 return {'success' : False , 'output' : '' , 'error' : 'El entorno de ejecución no está inicializado correctamente.' }
151145
152146 if current_process is not None and current_process .is_alive ():
@@ -158,7 +152,8 @@ def execute_user_code(code: str, timeout: int = 5) -> Dict[str, Any]:
158152 except queue .Empty :
159153 break
160154
161- result_queue = _multiprocessing_manager .Queue ()
155+ # Usamos la cola nativa en lugar del manager
156+ result_queue = multiprocessing .Queue ()
162157 process = multiprocessing .Process (
163158 target = _execution_target ,
164159 args = (result_queue , input_queue , gui_queue , wait_flag , code )
0 commit comments