Насколько я понимаю, "async def" нужно вызывать с loop_event, например,
loop = asyncio.get_event_loop()
loop.run_until_complete(<method>)
Я создал некоторый код ниже без цикла.Он по-прежнему поддерживает 100 асинхронных вызовов без проблем.Я что-то пропустил?
Пустой сервер спит 5 секунд.
from aiohttp import web
import asyncio
import time
async def hello(request):
#time.sleep(1)
await asyncio.sleep(5)
return web.Response(text='dummy done')
app = web.Application()
app.add_routes([web.get('/', hello)])
web.run_app(app,host='127.0.0.1', port=8081)
Фактический сервер принимает запросы.
import json
from aiohttp import web
import aiohttp
import asyncio
n = 0
def mcowA(n):
print (n, " : A")
return
async def fetch(session, url):
async with getattr(session,"get")(url) as response:
return await response.text()
def mcowB(n):
print (n, " : B")
return
async def runMcows(request):
global n
n = n + 1
mcowA(n)
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://localhost:8081')
print(n,html)
mcowB(n)
return web.Response(text=html)
try:
app = web.Application()
app.add_routes([web.get('/', runMcows)])
#loop = asyncio.get_event_loop(web.run_app(app))
#loop.run_forever()
web.run_app(app)
finally:
loop.close()