Python中的多线程Web服务器

时间:2016-09-01 08:52:33

标签: python multithreading webserver

视频讲座的一个例子。背景:讲师在python中提供了一个最简单的Web服务器。他创建了一个套接字,绑定它,进行侦听,接受连接,接收数据,并以大写形式将其发送回客户端。然后他说有一个缺点:这个Web服务器是单线程的。然后让我们分叉。

我无法理解这个例子。但首先,程序退出(sys.exit())。但我不能再次运行它了:

socket.error:[Errno 98]地址已在使用中。

我试着找出哪个进程正在侦听端口8080:netstat --listen | grep 8080.没什么。

嗯,8080在听什么?以及如何杀死它?

稍后添加: 有一种感觉,如果我等待一段时间(比如5-10分钟),我可以再次运行该程序。

import os
import socket
import sys


server_socket = socket.socket()
server_socket.bind(('', 8080))
server_socket.listen(10)
print "Listening"


while True:
    client_socket, remote_address = server_socket.accept()
    print "PID: {}".format(os.getpid())
    child_pid = os.fork()
    print "child_pid {}".format(child_pid)

    if child_pid == 0:    
        request = client_socket.recv(1024)
        client_socket.send(request.upper())
        print '(child {}): {}'.format(client_socket.getpeername(), request)
        client_socket.close()
        sys.exit()
    else:
        client_socket.close()

server_socket.close()

1 个答案:

答案 0 :(得分:0)

正确的netstat用法是:

netstat -tanp

因为您需要-a选项来显示侦听套接字。添加grep以快速找到您的程序:

netstat -tanp| grep 8080