多线程并发构建基础服务器

it2022-05-05  175

多线程并发 threading的多线程并发 对比多进程并发: * 消耗资源较少 * 线程应该更注意共享资源的操作 * 在python中应该注意GIL问题,网络延迟较高,线程并发也是一种可行的方法 实现步骤: 1. 创建套接字,绑定监听 2. 接收客户端请求,创建新的线程 3. 主线程继续接收其他客户端连接 4. 分支线程启动对应的函数处理客户端请求 5. 当客户端断开,则分支线程结束 Cookie: import traceback traceback.print_exc() 功能:更详细的打印异常信息 具体代码 #多线程构建服务器 from socket import * import os,sys from threading import * import traceback Host = '0.0.0.0' Port = 8888 Addr = (Host,Port) #客户端处理函数 def handler(connfd): print('connect from:{}'.format(connfd.getpeername)) while True: data = connfd.recv(1024) if not data: break print(data.decode()) connfd.send(b'Receive request') connfd.close() #创建套接字 s = socket() s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) s.bind(Addr) s.listen(5) #等待客户端请求 while True: try: connfd,addr = s.accept() except KeyboardInterrupt: s.close() sys.exit('服务端退出') except Exception as e: traceback.print_exc() continue #若不传递connfd将导致多线程共同使用全局变量connfd t = Thread(target = handler,args = (connfd,)) t.setDaemon(True) t.start() # join函数是阻塞函数不能写在这里 # t.join() # 若在最后循环退出,则很久之内都不会执行故使用setDaemon给系统处理退出的线程

最新回复(0)