作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 python 脚本,它是一个 http 服务器:http://paste2.org/p/89701 ,当使用低于或等于我在源代码中的 socket.listen() 调用中指定的值的并发级别(-c 开关)对 ApacheBench (ab) 进行基准测试时,一切正常,但只要把apache bench 中的并发级别高于 socket.listen() 中的值 - 调用性能下降,一些示例:
两次调用之间的代码没有任何变化,我无法弄清楚哪里出了问题 - 这个问题已经解决一天了。另请注意:无论 socket.listen() 设置为什么或 apache 中的并发性(-c 开关)设置为什么,相同代码的多路复用版本(我写来与线程版本进行比较)都可以正常工作。
我花了一天时间查看 IRC/python 文档,发布在 comp.lang.python 和我的博客上 - 我找不到任何人甚至知道可能出了什么问题。帮帮我!
最佳答案
我无法确认您的结果,并且您的服务器编码可疑。我启动了自己的服务器,也没有这个问题。让我们将讨论转移到更简单的层面:
import thread, socket, Queue
connections = Queue.Queue()
num_threads = 10
backlog = 10
def request():
while 1:
conn = connections.get()
data = ''
while '\r\n\r\n' not in data:
data += conn.recv(4048)
conn.sendall('HTTP/1.1 200 OK\r\n\r\nHello World')
conn.close()
if __name__ == '__main__':
for _ in range(num_threads):
thread.start_new_thread(request, ())
acceptor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
acceptor.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
acceptor.bind(('', 1234))
acceptor.listen(backlog)
while 1:
conn, addr = acceptor.accept()
connections.put(conn)
在我的机器上是这样的:
ab -n 10000 -c 10 http://127.0.0.1:1234/ --> 8695.03 [#/sec]
ab -n 10000 -c 11 http://127.0.0.1:1234/ --> 8529.41 [#/sec]
关于python - 我惊呆了 : weird problem with python and sockets + threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219547/
我是一名优秀的程序员,十分优秀!