python-3.x - asyncio 在监听 http 请求时不起作用
问题描述
我aiohttp
作为我的服务器运行。当一个请求进来时,我会尝试生成一个进程来处理它。但我收到以下错误:
回溯(最后一次调用):文件“asyncppx.py”,第 33 行,在 app.add_routes([web.get('/', asyncio.ensure_future(runMcows(n)))]) 文件“/Users/i3ye /Programming/vsc/async/env/lib/python3.6/site-packages/aiohttp/web_app.py”,第 231 行,在 add_routes self.router.add_routes(routes) 文件“/Users/i3ye/Programming/vsc/ async/env/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py”,第 966 行,在 add_routes route_obj.register(self) 文件“/Users/i3ye/Programming/vsc/async/env/lib/python3 .6/site-packages/aiohttp/web_routedef.py”,第 38 行,寄存器 reg(self.path, self.handler, **self.kwargs) 文件“/Users/i3ye/Programming/vsc/async/env/ lib/python3.6/site-packages/aiohttp/web_urldispatcher.py”,第 922 行,在 add_get resource.add_route(hdrs.METH_HEAD,处理程序,**kwargs)文件“/Users/i3ye/Programming/vsc/async/env/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py”,第 269 行,在 add_route expect_handler=expect_handler)文件“/Users/i3ye/Programming/vsc/async/env/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py”,第 682 行,在初始化 资源 = 资源)文件“/Users/i3ye/Programming/vsc/async/env/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py”,第 103 行,在init 断言可调用(处理程序),处理程序 AssertionError : > 任务被破坏,但它正在等待处理!任务:> sys:1:RuntimeWarning:从未等待协程“runMcows”
代码如下,有什么建议吗?
from aiohttp import web
import aiohttp
import asyncio
loop = asyncio.get_event_loop()
#tasks = []
n = 0
def mcowA(n):
print (n, " : A")
return
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
def mcowB(n):
print (n, " : B")
return
async def runMcows(n):
mcowA(n)
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://localhost:8081')
mcowB(n)
return html
try:
app = web.Application()
app.add_routes([web.get('/', asyncio.ensure_future(runMcows(n)))])
loop.run_forever()
web.run_app(app)
finally:
loop.close()
解决方案
如果您在此处查看服务器示例:
您的代码在主执行中应该是这样的:
app = web.Application()
app.add_routes([web.get('/', runMcows])
web.run_app(app)
app.add_routes
您需要传递一个runMcows
只能接受 1 个变量的协程,即请求本身。
async def runMcows(request):
mcowA(n)
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://localhost:8081')
mcowB(n)
return web.Response(text=html) # Change this response type based on what you need.
推荐阅读
- c# - 如何在 Visual Studio 中配置方法的摘要注释
- javascript - 使用 JavaScript 和 ViewModel 在 Asp.NET MVC 5 应用程序中发布数据
- android - 在xamarin表单android中未附加到窗口管理器崩溃的视图
- asp.net-mvc - 如何在 razor-engine 中的 ModelMetadata 对象上设置 DisplayFormatString 属性?
- angularjs - AngularJS 可以将用户路由到内存中同一视图的同一实例吗?
- java - 如何在不重新加载窗口的情况下单击按钮时在 JSP 中进行更新查询?
- mysql - 对多个内部联接进行分组
- jmeter - 无法在 Windows 10 64 位中使用 jdk 版本 1.8.0.45 访问 Jarfile ApacheJMeter.jar Errorlevel=1
- java - 时间和/或日期的排序
- join - SSRS 查找 - 可以加入多个列