Tôi đã có giả thuyết rằng nếu tôi đã viết các coroutine đệ quy cùng với asyncio, chúng sẽ không đạt tới độ sâu đệ quy tối đa, vì vòng lặp sự kiện gọi chúng (và hoạt động như tấm bạt lò xo). Tuy nhiên, đây không phải là trường hợp khi tôi viết chúng như thế này:Loài đệ quy đệ quy với 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))
Khi điều này chạy, tôi nhận được RuntimeError: maximum recursion depth exceeded while calling a Python object
.
Có cách nào để ngăn không cho ngăn xếp phát triển trong coroutines đệ quy với asyncio không?
mỗi lần bạn 'thu được từ' bạn đang tìm trong cuộc gọi tiếp theo. Bạn đã thử sử dụng hàng đợi chưa? Bằng cách đó bạn có thể đưa thông tin và dequeue vào coroutine tiếp theo mà không liên kết chúng với nhau. – shongololo