-
多进程tcp服务器
from multiprocessing import Process from socket import * def rData(newSocket): try: while True: newData = newSocket.recv(1024) if len(newData) > 0: print("%s"%newData) else: print("关闭套接字") break finally: newSocket.close() def main(): tSocket = socket(AF_INET,SOCK_STREAM) #重复使用绑定的信息(服务起的端口 因为谁先调用close谁就等待2msl) tSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #绑定 bindAddr = ("",7288) tSocket.bind(bindAddr) tSocket.listen(5) try: while True: newSocket,ipData = tSocket.accept() p = Process(target=rData,args=(newSocket,)) #Process建立的进程主进程自动等待所有子进程结束 p.start() #因为已经向子进程中copy了一份(引用),表示父进程中这个套接字也没有用处 #所以关闭 newSocket.close() finally: #当前所有的客户端服务完之后在进行关闭,表示不在接收 新的客户链接 tSocket.close() if __name__ == "__main__": main()
-
进程池版tcp服务器
from multiprocessing import Pool from socket import * def rData(newSocket): try: while True: socketData = newSocket.recv(1024) if len(socketData) > 0: print("%s"%socketData) else: print("关闭套接字") break finally: newSocket.close() def main(): tSocket = socket(AF_INET,SOCK_STREAM) #重复使用绑定信息 tSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #绑定端口 bindAddr = ("",7288) tSocket.bind(bindAddr) tSocket.listen(5) #创建进程 创建进程池的时候不要放在循环里 p = Pool() #这个进程内存无线大 while True: newSocket,socketData = tSocket.accept() #执行进程 p.apply_async(rData,args=(newSocket,)) #无线把新的套接字放在进程池里运行 #因为已经想子进程中copy了一份(引用),并且父进程中这个套接字也没有用处了 #所以关闭 newSocket.close() p.close() #关闭进程池 p.join() #主进程等待进程池里所有的子进程运行结束 if __name__ == "__main__": main()
python多进程服务器
猜你喜欢
转载自blog.csdn.net/zsx1314lovezyf/article/details/89929999
今日推荐
周排行