【问题标题】:aiohttp: Unclosed client session client_sessionaiohttp:未关闭的客户端会话 client_session
【发布时间】:2019-02-21 12:54:45
【问题描述】:

我有一个test.py 文件和一个AsyncioCurl.py 文件。
我已经使用session 而不仅仅是aiohttp.request
但它也给了我这个错误:

Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001FAEFEA7DA0>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x000001FAF10AC648>, 119890.906)]']
connector: <aiohttp.connector.TCPConnector object at 0x000001FAF0F702B0>

test.py

import asyncio
from AsyncioCurl import AsyncioCurl
async def a():
    payload = {}
    url = "https://awebsiteisthere.com"
    data = await AsyncioCurl().get(url,payload)
    print(data)

task = [
    a()
]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(task))

AsyncioCurl.py

import asyncio
import aiohttp
from Log import Log
from Base import sign
from config import config


class AsyncioCurl:
    def __init__(self):
        self.session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=4))

    async def get(self,url,param):
        Log.debug("GET: "+url)
        payload = {
            "cookie":config["Token"]["COOKIE"]
        }
        payload = dict(param,**payload)
        payload = sign(payload)
        async with self.session.get(url,params=payload) as r:
            Log.debug(r.status)
            return await r.json()

    async def post(self,url,param):
        async with sem:
            Log.debug("POST: "+url)
            payload = {
                "cookie":config["Token"]["COOKIE"]
            }
            payload = dict(param,**payload)
            payload = sign(payload)
            async with self.session.post(url,data=payload) as r:
                return await r.json()

    async def nspost(self,url,param):
        Log.debug("POST: "+url)
        headers = {
            "Accept":"application/json, text/plain, */*",
            "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
            "Accept-Language":"zh-CN,zh;q=0.9",
            "accept-encoding":"gzip, deflate",
            "cookie":config["Token"]["COOKIE"]
        }
        async with self.session.post(url,data=param,headers=headers) as r:
            return await r.json()

    async def nsdpost(self,url):
        Log.debug("POST: "+url)
        headers = {
            "Accept":"application/json, text/plain, */*",
            "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
            "Accept-Language":"zh-CN,zh;q=0.9",
            "accept-encoding":"gzip, deflate",
            "cookie":config["Token"]["COOKIE"]
        }
        async with self.session.post(url,headers=headers) as r:
            return await r.json()

【问题讨论】:

    标签: python python-3.x python-asyncio aiohttp


    【解决方案1】:

    这不是错误,只是警告。您可以通过关闭会话来处理它。试试这个:

    async def a():
        payload = {}
        url = "https://awebsiteisthere.com"
        curl = AsyncioCurl()
        data = await curl.get(url,payload)
        print(data)
        await curl.session.close()  # this
    

    【讨论】:

    • 对我来说 await curl.close() #without session 完成了这项工作
    【解决方案2】:

    我刚刚在您的test.pyscript 末尾添加了close()

    import asyncio
    from AsyncioCurl import AsyncioCurl
    async def a():
        payload = {}
        url = "https://awebsiteisthere.com"
        data = await AsyncioCurl().get(url,payload)
        print(data)
        await AsyncioCurl.close() #added this line
    
    task = [
        a()
    ]
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(task))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多