python 的 cgi 程序没法用 ab 来做性能测试

2016-04-11 12:04:59 +08:00
 eightqueen
import socket
import signal
import multiprocessing 

response = 'HTTP/1.1 200 OK\r\nConnection: Close\r\nContent-Length: 11\r\n\r\nHello World'

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('0.0.0.0', 9527))
server.listen(1024)

def handler(client):
    request = client.recv(1024)
    client.send(response)
    client.close()
    
#多进程里的子进程执行完后并不会死掉,而是变成僵尸进程,等待主进程挂掉后才会死掉,下面这条语句可以解决这个问题。
signal.signal(signal.SIGCHLD,signal.SIG_IGN)

while True:
    client, addr = server.accept()
    process = multiprocessing.Process(target=handler, args=(client,))
    process.start()

ab -n 1 -c 1 http://localhost:9527/

结果竟然超时,真是无语了

2417 次点击
所在节点    Python
2 条回复
keakon
2016-04-12 13:22:30 +08:00
最简单的做法是在最后一行加上 client.close(),子进程中只是把它这个 socket 的拷贝给 close 了,但因为父进程中还存在,所以不会关闭。
julyclyde
2016-04-12 15:38:00 +08:00
问题是你这不是 CGI 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/270113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX