Python Aiohttp и Asyncio без события цикла - PullRequest
0 голосов
/ 25 февраля 2019

Насколько я понимаю, "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()

1 Ответ

0 голосов
/ 28 февраля 2019

комментарий user4815162342 прибил его.

...