<div dir="ltr"><div>Alla base: invece di copiare dati si passa solo il link allo spazio dei nomi.</div><div><br></div>L'idea è questa: ogni lancio via asyncio di un callable DEVE essere no gil. Ed occorre, in fase di init, sovrascrivere le funzioni deputate alla gestione dello spazio dei nomi ammettendo solo i nomi interni  (e quindi sottostanti) al callable oltre al nome superiore del callable da poter chiamare solo nel caso opportuno.<div><br></div><div>In caso di chiamata di un nome di livello superiore verrà quindi ovviamente chiamato un errore, intercettandolo con una opportuna try-except si potrà uscire dal callable via un def torna qui, se al livello superiore una core è libero per gestire un processo libero chiamante del callable che ha il dato nel suo spazio dei nomi, glielo torna e il sub processo torna a lavorare, altrimenti si passa al livello superiore. Un decoratore @gestisciLaCosa potrà farlo facilmente.</div><div><br></div><div>Uscito dal callable il processo controlla la coda sulla funzione asyncio al livello che lo ha lanciato, Se vi sono altri processi in coda vuol dire che anche loro sono in attesa di dati. In tal caso il "core" del processore deve abbandonare il processo nella coda e scalare di un livello: se trova un processo in coda lo esegue, altrimenti scala al livello ancora precedente e così via. Alla fine trova di sicuro un qualcosa che manca e lo esegue e calcola.</div><div><br></div><div>La chiave del giochetto è che nessun processo può interrogare lo spazio dei nomi di un processo di pari livello, ma solo di livelli superiori. Funziona di sicuro, unico peccato: da python non è possibile .rilasciare gil, ma da Cython si. Per fortuna :-)))</div></div>