Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用循环重用会话中使用的相同连接_Python_Session_Tcp_Python Requests - Fatal编程技术网

Python 使用循环重用会话中使用的相同连接

Python 使用循环重用会话中使用的相同连接,python,session,tcp,python-requests,Python,Session,Tcp,Python Requests,我只想询问一下,当循环发送相同的POST请求时,是否重用相同的连接。假设我有以下代码: import requests import time r = requests.Session() url = "http://somenumbers.php" while True: x = r.post(url) time.sleep(10) 现在根据 好消息-多亏了urllib3,keep alive在一个会话中是100%自动的!您在会话中发出的任何请求都将自动重用相应的连接! 请注

我只想询问一下,当循环发送相同的POST请求时,是否重用相同的连接。假设我有以下代码:

import requests
import time
r = requests.Session()
url = "http://somenumbers.php"
while True:
    x = r.post(url)
    time.sleep(10)
现在根据

好消息-多亏了urllib3,keep alive在一个会话中是100%自动的!您在会话中发出的任何请求都将自动重用相应的连接! 请注意,只有在读取所有主体数据后,连接才会释放回池中以供重用;确保将stream设置为False或读取响应对象的content属性

这对上面的代码有效吗?我试图防止在服务器冻结或发生读取超时时发送相同的请求。在本文中,我讨论了整个问题,其中一个建议是重用连接,但是

  • 在同一个连接上发送同一个请求是否只意味着多个条目,或者它是否会解决这个问题,因为它只会在文档状态下发送一个条目时回调

  • 假设后者是真的,这不会影响性能并导致长时间延迟,因为请求被困在连接中


    • r.post
      是一个阻塞调用。该函数仅在发送请求并收到响应后返回。只要在循环终止之前访问
      x.content
      ,下一个循环将重新使用底层TCP连接

      不在同一个连接上发送相同的请求只意味着 多个条目,或者它将修复问题,因为它只会 当一个条目按照文档状态发送时,是否会回拉

      请求
      不会缓存响应。它不会检查以前是否发出了具有相同参数的请求。如果你需要的话,你必须自己建造一些东西

      这不会影响性能并导致请求后的长时间延迟吗 被困在连接中


      请求
      将仅重新使用可用连接。如果不存在空闲连接,将建立新连接。您可以使用
      requests.packages.urllib3.poolmanager.poolmanager
      控制池中的连接数。

      非常感谢您,先生。我需要的是这种连接,因为我的问题在于当服务器延迟时发送多个条目,并且我得到一个读取超时,这会导致我在同一个有问题的时间段再次尝试发送。因此,如果我不使用“Session()”,那么连接将是非阻塞的?如果TCP在阻塞连接的情况下失败,比如服务器延迟,该怎么办?TCP是否会在建立连接后尝试发送数据包,但随后遇到读取超时?无论使用何种会话,连接都将被阻塞。一旦发生超时,将关闭其中的连接。如果在客户端没有问题,你应该考虑让你的服务器不阻塞,这样它可以处理更多的连接,或者缩放你的服务器。如果连接是阻塞的,那么这意味着一旦连接关闭,我发送的数据包就会丢失吗?因为从我的代码看来,它们不会被删除,而是被发送,而且由于服务器被冻结,那么所有它们都会同时被接收(不止一个,因为我尝试在失败的情况下再次发送)。“阻塞”仅仅意味着任务将不会继续,直到请求完成或超时。看起来您只需要增加超时时间。