我有一个带有两个处理程序的简单 aiohttp-server。async for
第一个在循环中进行一些计算。第二个只是返回文本响应。not_so_long_operation
返回具有最慢递归实现的第 30 个斐波那契数,大约需要一秒钟。
def not_so_long_operation():
return fib(30)
class arange:
def __init__(self, n):
self.n = n
self.i = 0
async def __aiter__(self):
return self
async def __anext__(self):
i = self.i
self.i += 1
if self.i <= self.n:
return i
else:
raise StopAsyncIteration
# GET /
async def index(request):
print('request!')
l = []
async for i in arange(20):
print(i)
l.append(not_so_long_operation())
return aiohttp.web.Response(text='%d\n' % l[0])
# GET /lol/
async def lol(request):
print('request!')
return aiohttp.web.Response(text='just respond\n')
当我尝试获取/
then/lol/
时,它只会在第一个完成时给我第二个响应。
我在做什么错以及如何让索引处理程序在每次迭代时释放 ioloop?