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
来自视频讲座的示例。背景:讲师在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