【问题标题】:Python: requests.session -- how to ensure I am closing the TCP connection in Python 2.7.9?Python:requests.session——如何确保在 Python 2.7.9 中关闭 TCP 连接?
【发布时间】:2019-02-05 18:27:28
【问题描述】:
  • Python 2.7.9
  • 请求 2.17.3

我们观察到,当我们从多个线程调用它时(我们同时运行两到八个线程):

    with requests.Session() as s:
        s.put((apiserverUrl + str(id_num) + '/'), headers=headers,
                       auth=auth, data=jsonPayload)

有时没有可用的客户端套接字,它会失败并出现 10048 winsock 错误。

在我查看的一些文档中,requests.Session() 似乎会自行关闭,而在其他地方则表明它在某些默认超时内保持打开状态。

在每次请求后正确关闭套接字的正确方法是什么?

【问题讨论】:

  • 问题可能是在给定时间打开的套接字数量,而不是套接字是否正确关闭。
  • @mad_ 公平点。我们不会运行很多线程,OP 已更新。我想本地端口池比我们的线程数大得多,我强烈怀疑如果我们在使用后简单地关闭我们的端口,我们会很好。
  • 您可能每次都需要关闭请求。 s.put(...).close()

标签: python sockets python-requests


【解决方案1】:

Requests 库依赖于 urllib3 的底层 HTTPConnection

默认情况下,urllib3 保持 TCP 连接处于活动状态。

有几种方法可以指定其他方式。我更喜欢包含标题'Connection':'close':

with requests.Session() as s:
    s.put((apiserverUrl + str(id_num) + '/'), headers={'Connection':'close'},
                   auth=auth, data=jsonPayload)

(有关此答案的更多选项:Python-Requests close http connection)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多