介绍
使用Python怎么实现一个Web静态服务器非堵塞模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Python主要应用领域有哪些
1,云计算,典型应用OpenStack.2,网前端开发,众多大型网站均为Python开发。3。人工智能应用,基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python.4,系统运维工程项目,自动化运维的标配就是python + Django/flask.5,金融理财分析,量化交易,金融分析。6,大数据分析。
<强>单进程非堵塞模型强>
#=utf - 8编码 得到socket import * import 时间 #,用来存储所有的新链接的插座 g_socket_list =,列表() def main (): server_socket 才能=,插座(AF_INET, SOCK_STREAM) server_socket.setsockopt才能(SOL_SOCKET, SO_REUSEADDR ,, 1) server_socket.bind才能((& # 39;& # 39;,,7890)) server_socket.listen才能(128) #,才能将套接字设置为非堵塞 #,才能设置为非堵塞后,如果接受时,恰巧没有客户端连接,那么接受会 #,才能产生一个异常,所以需要尝试来进行处理 server_socket.setblocking才能(假) while 才能正确的: ,,,#,用来测试 ,,,time . sleep (0.5) ,,,试一试: ,,,,,newClientInfo =, server_socket.accept () ,,,except Exception as 结果: ,,,,, ,,,: ,,,,,印刷(“一个新的客户端到来:% s", %, str (newClientInfo)) ,,,,,newClientInfo [0] .setblocking (False), #,设置为非堵塞 ,,,,,g_socket_list.append (newClientInfo) ,,,for client_socket,, client_addr 拷贝g_socket_list: ,,,,,试一试: ,,,,,,,recvData =, client_socket.recv (1024) ,,,,,,,if recvData: ,,,,,,,,,印刷(& # 39;recv (% s): % & # 39;, %, (str (client_addr), recvData)) ,,,,,,,其他的: ,,,,,,,,,印刷(& # 39;(% s)客户端已经关闭& # 39;,%,str (client_addr)) ,,,,,,,,,client_socket.close () ,,,,,,,,,g_socket_list.remove ((client_socket client_addr)) ,,,,,except Exception as 结果: ,,,,,,, ,,,印刷(g_socket_list), #, for 测试 if __name__ ==, & # 39; __main__ # 39;: 以前,,main () ><强> web静态服务器——单进程非堵塞强>
import 时间 import 套接字 import 系统 import 再保险 class WSGIServer(对象): “““才能定义一个WSGI服务器的类“““ def 才能;__init__(自我,,港口,documents_root): ,,,#,1只创建套接字 ,,,self.server_socket =, socket.socket (socket.AF_INET, socket.SOCK_STREAM) ,,,#,2只绑定本地信息 ,,,self.server_socket.setsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR,, 1) ,,,self.server_socket.bind((““,,端口)) ,,,#,3只变为监听套接字 ,,,self.server_socket.listen (128) ,,,self.server_socket.setblocking(假) ,,,self.client_socket_list =,列表() ,,,self.documents_root =documents_root def 才能run_forever(自我): ,,,“““运行服务器“,“ ,,,#,等待对方链接 ,,,while 正确的: ,,,,,#,time . sleep (0.5), #, for 测试 ,,,,,试一试: ,,,,,,,,,new_socket new_addr =, self.server_socket.accept () ,,,,,except Exception as 随著: ,,,,,,,印刷(“1 - - - - - - - - - -“,,随著,#,for 测试 ,,,,,其他的: ,,,,,,,new_socket.setblocking(假) ,,,,,,,self.client_socket_list.append (new_socket) ,,,,,for client_socket 拷贝self.client_socket_list: ,,,,,,,试一试: ,,,,,,,,,request =, client_socket.recv (1024) .decode (& # 39; utf - 8 # 39;) ,,,,,,,except Exception as 随著: ,,,,,,,,,印刷(“2 - - - - - - - - - - -“,,随著,#,for 测试 ,,,,,,,其他的: null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用Python怎么实现一个Web静态服务器非堵塞模式