【问题标题】:python aiohttp timeout is for a single TCP connection or for a http request?python aiohttp超时是针对单个TCP连接还是针对http请求?
【发布时间】:2020-09-18 16:29:57
【问题描述】:

在 python aiohttp 中,我们可以在ClientSession 或(例如)session.get 中设置超时。 https://docs.aiohttp.org/en/stable/client_quickstart.html

假设我们这样做

async with aiohttp.ClientSession(timeout=<customized timeout>) as session: 
    async with session.get(<url1>): 
        xxx
    async with session.get(<url2>): 
        xxx

customized timeout 是针对整个async with aiohttp.ClientSession() 还是针对每个async with session.get

【问题讨论】:

    标签: python timeout aiohttp


    【解决方案1】:

    超时适用于每个单独的请求;你可以像这样测试它:

    import asyncio
    import aiohttp
    import random
    
    async def main():
        timeout = aiohttp.ClientTimeout(total=3)
        async with aiohttp.ClientSession(timeout=timeout) as session:
            base_url = "http://httpbin.org/delay/%d"
            for i in range(10):
                url = base_url % random.randint(1, 5)
                try:
                    async with session.get(url) as response:
                        data = await response.json()
                        print(f"step {i}, url {url}, status {response.status}, keys: {len(data)}")
                except asyncio.exceptions.TimeoutError:
                    print(f"step {i}, url {url}, status timeout")
    
    asyncio.run(main())
    

    我的电脑上的结果:

    step 0, url http://httpbin.org/delay/5, status timeout
    step 1, url http://httpbin.org/delay/5, status timeout
    step 2, url http://httpbin.org/delay/2, status 200, keys: 7
    step 3, url http://httpbin.org/delay/4, status timeout
    step 4, url http://httpbin.org/delay/4, status timeout
    step 5, url http://httpbin.org/delay/3, status 200, keys: 7
    step 6, url http://httpbin.org/delay/2, status 200, keys: 7
    step 7, url http://httpbin.org/delay/3, status 200, keys: 7
    step 8, url http://httpbin.org/delay/1, status 200, keys: 7
    step 9, url http://httpbin.org/delay/2, status 200, keys: 7
    

    【讨论】:

    • 很高兴这个答案很有帮助;如果您的问题得到解答,请将其标记为solved
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多