【发布时间】:2011-01-27 12:25:49
【问题描述】:
我在 python 文档中看到的所有关于sock.listen(5) 的示例都建议我应该将最大积压数设置为5。这给我的应用程序带来了问题,因为我期待一些非常高的容量(许多并发连接)。我将它设置为 200 并且在我的系统上没有发现任何问题,但想知道在它引起问题之前我可以将它设置多高..
有人知道吗?
编辑:这是我的 accept() 循环。
while True:
try:
self.q.put(sock.accept())
except KeyboardInterrupt:
break
except Exception, e:
self.log("ERR %s" % e)
【问题讨论】:
-
我刚刚检查了
socket.SOMAXCONN的值并注意到它的128,这可以解释为什么将值设置为200 对ab -c 200不起作用(它只适用于120 的并发)。 -
使用 self.q.put_nowait() 代替。
-
@Heath Hunnicutt:这没什么用,因为队列没有限制,因此它永远不会阻塞。 (另外,到目前为止,我还没有看到队列长度超过 100)
-
你介意逗我一下,看看 x = sock.accept() \ x.close() 是否为你解决了ab阻塞的问题?特别是,您所描述的您无法在 SOMAXCONN 之上维护多个连接不应该是您调用 accept() 后的 Linux 行为,这将是(默认)1024 的每个进程打开文件句柄限制。跨度>
标签: python concurrency sockets multithreading