首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请求session.close()不关闭会话

请求session.close()不关闭会话
EN

Stack Overflow用户
提问于 2020-09-08 10:54:40
回答 2查看 865关注 0票数 4

我希望调用session对象的close()来关闭会话。但看起来那是不可能的。我是不是遗漏了什么?

代码语言:javascript
运行
复制
import requests
s = requests.Session()
url = 'https://google.com'
r = s.get(url)
s.close()
print("s is closed now")
r = s.get(url)
print(r)

产出:

代码语言:javascript
运行
复制
s is closed now
<Response [200]>

对s.get()的第二个调用应该给出了一个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-08 11:37:57

Session.close()内部,我们可以发现:

代码语言:javascript
运行
复制
def close(self):
    """Closes all adapters and as such the session"""
    for v in self.adapters.values():
        v.close()

实现内部

代码语言:javascript
运行
复制
   def close(self):
        """Disposes of any internal state.

        Currently, this closes the PoolManager and any active ProxyManager,
        which closes any pooled connections.
        """
        self.poolmanager.clear()
        for proxy in self.proxy_manager.values():
            proxy.clear()

所以我能看出的是,它清除了Session对象的状态。因此,如果您已经登录到某个站点,并在Session中存储了一些cookie,那么一旦使用session.close()方法,这些cookie将被删除。尽管如此,内部功能仍然能够发挥作用。

票数 3
EN

Stack Overflow用户

发布于 2020-09-08 11:43:34

您可以使用上下文管理器自动关闭它:

代码语言:javascript
运行
复制
import requests

with requests.Session() as s:
    url = 'https://google.com'
    r = s.get(url)

请参阅requests docs > Sessions

这将确保会话在with块退出后立即关闭,即使发生了未处理的异常。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63792435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档