欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

Python实现HTTP服务器(四)单进程线程非阻塞实现多任务

发布时间:2025/3/15 python 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Python实现HTTP服务器(四)单进程线程非阻塞实现多任务 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

上篇博客使用了进程、线程、协程实现了多任务的HTTP服务器。本文使用非阻塞单线程进程实现多任务。
1.设置套接字为非阻塞状态

2.建立一个列表用来装交互的套接字

3.遍历列表,如果收到数据则进行交互,如果收到的数据为空,则说明浏览器关闭,关闭套接字,从列表中删除这个套接字

import socket import timetcp_server_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server_tcp.bind(("", 7899)) tcp_server_tcp.listen(128) tcp_server_tcp.setblocking(False) # 设置套接字为非堵塞的方式client_socket_list = list()while True:# time.sleep(0.5)try:new_socket, new_addr = tcp_server_tcp.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 = client_socket.recv(1024)except Exception as ret:print(ret)print("----这个客户端没有发送过来数据----")else:print("-----没有异常-----")print(recv_data)if recv_data:# 对方发送过来数据print("----客户端发送过来了数据-----")else:# 对方调用close 导致了 recv返回client_socket.close()client_socket_list.remove(client_socket)print("---客户端已经关闭----") 新人创作打卡挑战赛发博客就能抽奖!定制产品红包拿不停!

总结

以上是生活随笔为你收集整理的Python实现HTTP服务器(四)单进程线程非阻塞实现多任务的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。