Я использую последнюю версию (1.0.2
) aiohttp с python3.5. У меня есть следующий код сервера.
import asyncio
from aiohttp.web import Application, Response, StreamResponse, run_app
async def long(request):
resp = StreamResponse()
name = request.match_info.get('name', 'Anonymous')
resp.content_type = 'text/plain'
for _ in range(1000000):
answer = ('Hello world\n').encode('utf8')
await resp.prepare(request)
resp.write(answer)
await resp.write_eof()
return resp
async def init(loop):
app = Application(loop=loop)
app.router.add_get('/long', long)
return app
loop = asyncio.get_event_loop()
app = loop.run_until_complete(init(loop))
run_app(app)
Если я затем запущу два curl-запроса curl http://localhost:8080/long
в разных терминалах, только первый получит данные
Я думал, что с помощью asyncio
вы можете в однопоточном коде начать обслуживать другой ответ, в то время как другой ожидает ввода-вывода.
Большая часть кода, который я нашел в Интернете о concurent + asyncio, говорит только о стороне клиента, но не о стороне сервера.
Я что-то упустил или мое понимание того, как работает asyncio, ошибочно?