Ho avuto l'ipotesi che se avessi scritto coroutine con ricorsi reciprocamente asincroni, non avrebbero raggiunto l'eccezione massima di profondità di ricorsione, poiché il ciclo degli eventi li chiamava (e si comportava come un trampolino). Questo, tuttavia, non è il caso quando li scrivo in questo modo:Coroutine reciprocamente ricorsive con asyncio
import asyncio
@asyncio.coroutine
def a(n):
print("A: {}".format(n))
if n > 1000: return n
else: yield from b(n+1)
@asyncio.coroutine
def b(n):
print("B: {}".format(n))
yield from a(n+1)
loop = asyncio.get_event_loop()
loop.run_until_complete(a(0))
Quando questo viene eseguito, ottengo RuntimeError: maximum recursion depth exceeded while calling a Python object
.
C'è un modo per mantenere la pila di crescere in coroutine ricorsive con asyncio?
ogni volta che "cedi da" ti stai collegando alla prossima chiamata. Hai provato a utilizzare una coda invece? In questo modo puoi distribuire le informazioni e disconnetterti nella successiva coroutine senza collegarle tra loro. – shongololo