5

getresponserecv在读取 HTML 请求的标头时发出许多调用。它实际上是recv针对每个字节发出的,这会导致许多系统调用。如何优化?

我在带有 strace 转储的 Ubuntu 机器上进行了验证。

示例代码:

conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD", "/index.html")
r1 = conn.getresponse()

strace 转储:

sendto(3, "HEAD /index.html HTTP/1.1\r\nHost:"..., 78, 0, NULL, 0) = 78
recvfrom(3, "H", 1, 0, NULL, NULL)      = 1
recvfrom(3, "T", 1, 0, NULL, NULL)      = 1
recvfrom(3, "T", 1, 0, NULL, NULL)      = 1
recvfrom(3, "P", 1, 0, NULL, NULL)      = 1
recvfrom(3, "/", 1, 0, NULL, NULL)      = 1
...
4

1 回答 1

3
r = conn.getresponse(buffering=True)

在 Python 3.1+ 上没有buffering参数(它是默认值)。

于 2013-01-25T11:28:33.240 回答