我尝试在服务器和客户端上同时使用aiohttp 3.6.2: 对于webhook,执行工作:
1)从服务获取JSON请求 2)快速将HTTP 200 OK发送回服务 3)之后进行了其他工作:发出http请求以减慢Web服务的速度(回答2-5秒)
我不理解在视图(或处理程序)返回web之后如何执行工作。响应(文本=“ OK”)?
当前视图: (这很慢,导致响应之前执行慢的http_request) view.py:
async def make_http_request(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
print(await resp.text())
async def work_on_request(request):
url = (await request.json())['url']
await make_http_request(url)
return aiohttp.web.Response(text='all ok')
routes.py:
from views import work_on_request
def setup_routes(app):
app.router.add_get('/', work_on_request)
server.py:
from aiohttp import web
from routes import setup_routes
import asyncio
app = web.Application()
setup_routes(app)
web.run_app(app)
所以,对我来说,解决方法是从另一个event_loop开始另一个线程,或者您知道如何在当前事件循环中添加一些工作?
答案 0 :(得分:0)
已经不实际了,因为我发现决心将另一个任务添加到主event_loop中: //另外,我创建了一个全局队列以在彼此之间互操作协程。
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
queue = asyncio.Queue(maxsize=100000)
loop.create_task(worker('Worker1', queue))
app = web.Application()
app['global_queue'] = queue