fix: jupyter_exec usa run_in_executor para execute_cell

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) <noreply@anthropic.com>
This commit is contained in:
2026-04-02 22:03:59 +02:00
parent 0fa16a033c
commit 974f704214
+9 -2
View File
@@ -8,6 +8,7 @@ Tres modos de ejecucion:
import asyncio import asyncio
import json import json
from functools import partial
from typing import Any from typing import Any
from urllib.error import URLError from urllib.error import URLError
from urllib.request import Request, urlopen 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: with KernelClient(server_url=server_url, token=token, kernel_id=kernel_id) as kernel:
cell_index = nb.add_code_cell(code) 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) # Let Y.js propagate changes to other clients (browser)
await asyncio.sleep(2) await asyncio.sleep(2)
@@ -138,7 +142,10 @@ async def _async_execute_cell(
await nb.wait_until_synced() await nb.wait_until_synced()
with KernelClient(server_url=server_url, token=token, kernel_id=kernel_id) as kernel: 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) await asyncio.sleep(2)