From 974f704214ffbe3337af8f1fa66d82cbc613e06a Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Thu, 2 Apr 2026 22:03:59 +0200 Subject: [PATCH] fix: jupyter_exec usa run_in_executor para execute_cell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Evita bloquear el event loop asyncio ejecutando execute_cell (operación síncrona con websocket) en un thread executor. Co-Authored-By: Claude Opus 4.6 (1M context) --- python/functions/notebook/jupyter_exec.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/python/functions/notebook/jupyter_exec.py b/python/functions/notebook/jupyter_exec.py index 9d694619..16bcaf32 100644 --- a/python/functions/notebook/jupyter_exec.py +++ b/python/functions/notebook/jupyter_exec.py @@ -8,6 +8,7 @@ Tres modos de ejecucion: import asyncio import json +from functools import partial from typing import Any from urllib.error import URLError from urllib.request import Request, urlopen @@ -106,7 +107,10 @@ async def _async_append_execute( with KernelClient(server_url=server_url, token=token, kernel_id=kernel_id) as kernel: cell_index = nb.add_code_cell(code) - result = nb.execute_cell(cell_index, kernel) + loop = asyncio.get_event_loop() + result = await loop.run_in_executor( + None, partial(nb.execute_cell, cell_index, kernel), + ) # Let Y.js propagate changes to other clients (browser) await asyncio.sleep(2) @@ -138,7 +142,10 @@ async def _async_execute_cell( await nb.wait_until_synced() with KernelClient(server_url=server_url, token=token, kernel_id=kernel_id) as kernel: - result = nb.execute_cell(cell_index, kernel) + loop = asyncio.get_event_loop() + result = await loop.run_in_executor( + None, partial(nb.execute_cell, cell_index, kernel), + ) await asyncio.sleep(2)