1、多线程并发
1、相比多进程并发
劣势:1、可能余姚同步和互斥机制
2、收到GIL的影响
优势:
至于要消耗较少的系统资源
2、实现方式:
threading socket 模块完成
3、步骤:
1、创建套接字
2、准备接收客户端连接
3、每当有一个客户端连接进来就创建一个新的线程
4、客户端退出后结束相应相应线程,关闭客户端套接字
示例:
# thread_server.py
import socket
import threading as thd
import os
import sys
# HOST = '127.0.0.1'
HOST='172.60.11.176'
PORT = 8888
# 处理具体的客户端请求
def handler(connfd):
print('Got connection from', connfd.getpeername())
while True:
data = connfd.recv(1024).decode
if not data:
break
connfd.send(b'receive your message')
connfd.close()
# 创建套接字
s = socket.socket()
s.bind((HOST, PORT))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.listen(5)
# 主线程循环接收客户端连接
while True:
try:
c, addr = s.accept()
except KeyboardInterrupt:
raise
except Exception as e:
print(e)
continue
t = thd.Thread(target=handler, args=(c,))
t.setDaemon(True)
t.start()
s.close()
2、基于多线程的HTTPServer
1、思路:
1、使用并发方案,有助于建立长连接2、用线程完成并发消耗更小资源
3、httpserver的功能(解析请求和处理相应)封装成类
4、所有的静态页面收集到一个文件夹
5、使用不同的模块处理客户端请求,这些放在一个文件夹中。