【多线程并发模型】
基于threading的多线程并发
1.对比多进程并发:
1.优点:
资源消耗小
2.缺点:
需要注意共享资源的争夺
python多线程收到GIL的影响
2.实现方式:
threading socket 模块完成
3.实现步骤:
1.创建套接字,绑定,监听
2.接收客户端连接请求,创建新的线程
3.主线程继续等待其他客户端连接,分支线程执行客户端请求
4.处理完客户端请求后,分支线程退出,关闭客户端套接字
4.示例:
from socket import *
from threading import Thread
import sys
HOST = '0.0.0.0'
PORT = 8888
ADDR = (HOST,PORT)
def client_handle(c):
print('Connect from',c.getpeername())
while True:
data = c.recv(1024).decode()
if not data:
break
print(data)
c.send(b'Recieve your message')
c.close()
# 创建套接字
s = socket()
# 设置端口可重用
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind(ADDR)
s.listen()
# 循环接收客户端请求
while True:
try:
c,addr = s.accept()
except KeyboardInterrupt:
s.close()
sys.exit('服务器退出')
except Exception as e:
print(e)
continue
# 创建线程,绑定函数执行具体客户端请求
t = Thread(target=client_handle,args=(c,))
t.setDaemon(True)
t.start()
客户端代码
from socket import *
# 创建套接字
sockfd = socket(AF_INET,SOCK_STREAM)
# 发起连接
sockfd.connect(('176.130.5.63',8888))
while True:
data = input('发送>>>')
if not data:
break
# 将内容变成bytes格式发送
sockfd.send(data.encode())
# 接受消息
data = sockfd.recv(1024).decode()
print('收到消息:',data)
# 关闭套接字
sockfd.close()