这个问题通常是由于未正确等待所有的异步任务完成而导致的。可以使用asyncio.wait()方法等待所有异步任务完成后再关闭服务器。下面是一个简单的示例代码:
import asyncio
from aiohttp import web
async def index(request):
return web.Response(text="Hello, World")
async def init_app():
app = web.Application()
app.add_routes([web.get('/', index)])
return app
async def main():
app = await init_app()
runner = web.AppRunner(app)
await runner.setup()
site = web.TCPSite(runner, "localhost", 8080)
await site.start()
# Wait for tasks to complete before stopping server
tasks = [task for task in asyncio.Task.all_tasks() if task is not
asyncio.Task.current_task()]
await asyncio.gather(*tasks)
await runner.cleanup()
asyncio.run(main())
在上面的示例中,我们使用asyncio.gather()方法等待所有的异步任务完成,然后再手动清理runner。这样就可以避免aiohttp服务器立即停止的问题。