之前实现了多进程 多线程 以及协程。其实多任务是为了解决阻塞问题。那么单进程就不能解决堵塞问题吗?答案是可以的:
import socket
import time
tcp_service_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_service_socket.bind(('',7890))
tcp_service_socket.listen(128)
tcp_service_socket.setblocking(False) # 设置套接字为非阻塞的方式
client_socket_list = list()
while True:
time.sleep(1)
try:
new_socket, new_addr = tcp_service_socket.accept()
except Exception as ret:
print('---没有新的客户端到来---')
else:
print('---只要没有产生异常,就意味着来了一个新的客户端---')
new_socket.setblocking(False) #设置套接字为非阻塞的方式
client_socket_list.append(new_socket)
for client_socket in client_socket_list:
try:
recv_data = new_socket.recv(1024)
except Exception as ret:
print('---这个客户端没有发送数据---')
else:
if recv_data:
# 对方发来了数据