TCP服务端支持并发
解决方式:开多线程
服务端
基础版
import socket
"""
服务端
1.要有固定的IP和PORT
2.24小时不间断提供服务
3.能够支持并发
"""
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
def talk(conn):
while True:
try:
data = conn.recv(1024)
if len(data) == 0:break
print(data.decode('utf-8'))
conn.send(data.upper())
except ConnectionResetError as e:
print(e)
break
conn.close()
while True:
conn, addr = server.accept() # 监听 等待客户端的连接 阻塞态
print(addr)
进阶版:支持并发
import socket
from threading import Thread # ①多导入了这个
"""
服务端
1.要有固定的IP和PORT
2.24小时不间断提供服务
3.能够支持并发
"""
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
def talk(conn):
while True:
try:
data = conn.recv(1024)
if len(data) == 0:break
print(data.decode('utf-8'))
conn.send(data.upper())
except ConnectionResetError as e:
print(e)
break
conn.close()
while True:
conn, addr = server.accept() # 监听 等待客户端的连接 阻塞态
print(addr)
t = Thread(target=talk,args=(conn,)) # ②加了这个
t.start() # ③加了这个
客户端
import socket
# 客户端都是一样的
client = socket.socket()
client.connect(('127.0.0.1',8080))
while True:
client.send(b'hello')
data = client.recv(1024)
print(data.decode('utf-8'))
GIL全局解释器锁
ps:python解释器有很多种 最常见的就是CPython解释器,GIL也是在CPython中的。
GIL本质也是一把互斥锁:(是加在解释器上的
)
GIL的存在是因为CPython解释器的内存管理不是线程安全的
GIL工作原理:将并发变成串行牺牲效率保证数据的安全 ,用来阻止同一个进程下的多个线程的同时执行