1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// src/python/runtime.rs
//
// Runtime Tokio compartido por proceso para los bindings Python.
//
// Antes, casi cada método creaba un `tokio::runtime::Runtime` nuevo y hacía
// `block_on` SIN soltar el GIL: cada llamada pagaba la construcción de un
// runtime completo y los hilos Python se serializaban aunque el motor sea
// concurrente. Ahora hay UN runtime multi-thread por proceso (inicialización
// perezosa) y todo `block_on` suelta el GIL mientras el future corre, así
// otros hilos Python avanzan en paralelo.
//
// El runtime es estable durante toda la vida del proceso, lo que además
// permite que el motor mantenga tasks de fondo (auto-GC, y en el futuro el
// applier como task) sin que mueran al final de una llamada.
use *;
use Future;
use OnceLock;
static RUNTIME: = new;
/// Runtime Tokio del proceso (multi-thread, inicialización perezosa).
pub
/// Ejecuta un future en el runtime compartido, SOLTANDO el GIL mientras
/// corre: los demás hilos Python siguen ejecutando en paralelo.
pub