我试图编写一个简单的非阻塞 HTTP 服务器。但我无法让所有程序(Task1,Task2 和服务器)同时运行。无论我做什么,服务器都会被阻塞。
import asyncio
from aiohttp import web
async def Task1():
for i in range(100):
print ('Task-1',i)
await asyncio.sleep(1)
async def Task2():
for i in range(100):
print ('Task-2',i)
await asyncio.sleep(2)
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
app = web.Application()
app.add_routes([web.get('/', handle), web.get('/{name}', handle)])
loop=asyncio.new_event_loop()
loop.create_task(Task1())
loop.create_task(Task2())
loop.create_task(web.run_app(app)) #with this line commented task1/2 works
loop.run_forever()
当服务器运行时,应该在终端上打印预期结果。 但是我只得到了终端输出或者服务器运行(从末尾的第二行注释掉), 但我希望两者都有。
Task-1 0
Task-2 0
Task-1 1
Task-2 1
Task-1 2
Task-1 3
Task-2 2
Task-1 4
Task-1 5
Task-2 3
Task-1 6
---more---
create_task
的情况下调用web.run_app(app)
? - amiroucheaiohttp
,但是浏览了一下文档,有一些建议是应该使用aiohttp.web.AppRunner代替run_app
。例如参考这个注释。 - larsks