我有这段代码,我发送一个
POST
请求并使用 aiohttp
包设置最大超时:
from aiohttp import ClientTimeout, ClientSession
response_code = None
timeout = ClientTimeout(total=2)
async with ClientSession(timeout=timeout) as session:
try:
async with session.post(
url="some url", json=post_payload, headers=headers,
) as response:
response_code = response.status
except Exception as err:
logger.error(err)
该部分有效,但是每当超时和分别达到
except
子句时,请求似乎都不会被取消 - 即使已引发异常,我仍然在另一端收到它。我希望只要达到超时时间,请求就会自动取消。预先感谢。
如果没有服务器代码,很难说服务器端出了什么问题。
对于当前版本的
aiohttp
,您需要显式启用它。
解决方案基于启动服务器的方式:
web.AppRunner
那么您必须将 handler_cancellation=True
传递给其构造函数app = web.Application()
app.add_routes(routes)
runner = web.AppRunner(
app,
handler_cancellation=True,
)
await runner.setup()
site = web.TCPSite(runner, port=port)
await site.start()
handler_cancellation=True
直接传递到 run_app
方法中:from aiohttp import web
async def handle(request):
return web.Response(text="Hello, world")
app = web.Application()
app.router.add_get('/', handle)
web.run_app(app, handler_cancellation=True)