Python 中的多线程网络服务器

Multithreaded webserver in Python

来自视频讲座的示例。背景:讲师在python中给出了一个最简单的web服务器。他创建了一个套接字,绑定它,进行监听,接受连接,接收数据,然后以大写形式发送回客户端。然后他说有一个缺点:这个网络服务器是单线程的。那我们fork吧。

我不能很好地理解这个例子。但首先,程序会退出 (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()

正确的 netstat 用法是:

netstat -tanp

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

netstat -tanp| grep 8080